bind
var obj = {
a: 1,
foo: function f() {
console.log(this.a);
}
}
obj.foo(); //1
var g = obj.foo;
g(); //undefined
g = obj.foo.bind(obj);
g(); //1
g.applay(obj) // 1
g.call(obj) //1
函数foo在非严格模式下如果没有明确绑定对象,则会绑定到全局对象,所以输出undefined
。在严格模式下则会报错。
为什么obj.foo()
可以正确输出呢?原因在于这种调用方式会[隐式绑定](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20&%20object%20prototypes/ch2.md)到执行这个方法的对象上(obj)。
call 和applay
function xxx(a,b,c){
console.log(a);
console.log(b);
console.log(c);
console.log(this)
}
xxx.applay(obj,[1,2,3])
xxx.call(obj,1,2,3,)