zoukankan      html  css  js  c++  java
  • 珂理化函数

    有个需求:过一秒后执行fn,传递一个数字100,让fn中的this变为obj,输出"柯理化函数100"
        var name = "window";
    
        var obj = {name: "柯理化函数"};
    
        function fn(e, num) {
            console.log(this.name + num);
        }
    

     

     第一种思路,常规想法:

        window.setTimeout(fn, 1000);//->this window ->windowundefined
    
        window.setTimeout(fn,1000)
        document.addEventListener("click",fn,false);

      1)不灵活控制this
      2)不能传递形参的值

        window.setTimeout(function () {
                fn.call(obj, 100);
            }, 1000);
    

      

    用珂理化函数来解决:

        function bind(callBack, context) {
            var outerArg = Array.prototype.slice.call(arguments, 2);
            return function () {
                var innerArg = Array.prototype.slice.call(arguments, 0);
                var arg = innerArg.concat(outerArg);
                callBack.apply(context, arg);
            }
        }
    

      

     window.setTimeout(bind(fn, obj, 100, 200), 1000); //珂理化函数200
        window.setTimeout(function () {
            fn.apply(obj, [100, 200]); //珂理化函数200
        }, 1000);
    
        document.addEventListener("click", bind(fn, obj, 100, 200), false); //珂理化函数100
        document.addEventListener("click", function (e) {
            fn.apply(obj, [e, 100, 200]);  //珂理化函数100
        }, false);
    

      

  • 相关阅读:
    pysocketserver
    协程
    py模块和包
    py网络编程
    GridView绑定技巧终结者
    iOS 证书/私钥/代码签名/描述文件
    八拜之交
    POJ3230(Travel)
    POJ2553(The Bottom of a Graph)
    动态规划的实质
  • 原文地址:https://www.cnblogs.com/cataway/p/5084359.html
Copyright © 2011-2022 走看看