详解javascript的bind方法
16lz
2021-03-10
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人进行了赞赏支持
更多相关文章
- PHP扩展知识:URL相关函数和api接口案例
- python入门教程14-01 (python语法入门之python内存泄露)
- Spark2.x精通:源码剖析SortShuffleWriter具体实现
- Spark2.x精通:BlockManagerMaster源码剖析
- Excel重大更新,VLOOKUP退役,新的搜索函数上线
- 如何使用Excel快速生成随机数据,你肯定想不到
- SQL如何提前字符串中的字母?
- SQL如何提取字符串中的中文和数字?
- C++入门第一课(命名空间;输入输出;缺省参数;函数重载)