var x = 100;
var module = {
x:42,
getX: function(){
return this.x;
}
}
var retrieveX = module.getX
console.log(module.getX) //ƒ (){return this.x;}
console.log(retrieveX) //ƒ (){return this.x;}
console.log(retrieveX()) //100,因为此时retrieveX中的this指向的全局,所以打印出全局变量中的x
var boundGetX = retrieveX.bind(module) //将函数retrieveX绑到对象module上,此时retrieveX中的this指的是module
console.log(boundGetX()) //42,原因上一句解释了哦
////////////再理解/////////////
var printX = function(){
return this.x;
}
var printXObj = printX.bind(module);
console.log(printXObj());
Function.prototype.bind,
Function.prototype.call,
Function.prototype.apply,
此三者只有一个作用,改变函数中的this指向,
区别:
call,apply基本没什么区别只是传参方式略有不同,call以多个参数的形式,apply以一个数组的形式
1、bind方法将指定Function绑到指定对象后生成一个新的Function,并且新生成的这个Function不会立即执行,只有在调用的时候执行。
2、call,apply绑定和执行是同时进行的
总:bind更加灵活,
网友评论