JS的bind() 方法建立一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其他参数将做为新函数的参数,供调用时使用。
经过bind可解决两个问题:1)以隐蔽和优雅的方式解决依赖注入的问题,能够将函数执行须要的上下文环境对象经过bind方法传递给函数,在函数内部直接使用this来引用。2)解决多层调用时this对象没法传递给内部函数的问题,实际是第一个问题的延展。
看代码样例:ide
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传入。函数