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);
    

      

  • 相关阅读:
    JS之AJAX篇FormData对象
    JS之AJAX进度事件
    JS之BOM篇navigator对象
    JS之AJAX响应解码
    JS之AJAXXHR对象
    SAP NetWeaver平台介绍
    图解SSIS批量导入Excel文件(转)
    SQL Server 2008安装图解(转)
    实施BI应该如何找准切入点?
    如何修改SQL SA密码
  • 原文地址:https://www.cnblogs.com/cataway/p/5084359.html
Copyright © 2011-2022 走看看