JS的bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
通过bind可解决两个问题:1)以隐蔽和优雅的方式解决依赖注入的问题,可以将函数执行需要的上下文环境对象通过bind方法传递给函数,在函数内部直接使用this来引用。2)解决多层调用时this对象无法传递给内部函数的问题,实际是第一个问题的延展。
看代码样例:

var obj = {    a: function(){        //'this' is 'obj',是真正的this        console.log(this);        var func = function(){            //'this' is 'window', 容易混淆的地方,上层对象无法通过this引用了,这里的this是window对象了。            console.log(this);            //所以下面这句话出错,无法找到属性            console.log(this.c);        };        func();    },    b : function(){        var func = function(){            //'this' is 'obj',是通过bind传入的。            console.log(this);            console.log(this.c);        }.bind(this);        func();    },    c : 'Hello!'}obj.a();obj.b();

在实际开发工作中,如果需要在函数内部应用外部对象,可以通过bind传入;如果需要在嵌套函数或回调函数内部应用上级对象,也可以通过bind传入。

©著作权归作者所有:来自51CTO博客作者北京王老师的原创作品,如需转载,请注明出处,否则将追究法律责任

您的赞赏是最大的鼓励!

赞赏

0人进行了赞赏支持

更多相关文章

  1. PHP扩展知识:URL相关函数和api接口案例
  2. python入门教程14-01 (python语法入门之python内存泄露)
  3. Spark2.x精通:源码剖析SortShuffleWriter具体实现
  4. Spark2.x精通:BlockManagerMaster源码剖析
  5. Excel重大更新,VLOOKUP退役,新的搜索函数上线
  6. 如何使用Excel快速生成随机数据,你肯定想不到
  7. SQL如何提前字符串中的字母?
  8. SQL如何提取字符串中的中文和数字?
  9. C++入门第一课(命名空间;输入输出;缺省参数;函数重载)

随机推荐

  1. Selector与Shape的基本用法
  2. RelativeLayout属性详解
  3. 【Android】Android 代码判断是否获取ROO
  4. Android Drawable在XML和JAVA的表示
  5. android环境搭建
  6. Android(安卓)对应用进行单元测试
  7. 记录-解决设置透明状态栏,软键盘弹起问题
  8. Android中Cursor(游标)类的概念和用法
  9. ADT版本更新失败,降级
  10. 为Android修改hosts-无需重启