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
函數(shù)foo在非嚴(yán)格模式下如果沒(méi)有明確綁定對(duì)象,則會(huì)綁定到全局對(duì)象,所以輸出undefined
。在嚴(yán)格模式下則會(huì)報(bào)錯(cuò)。
為什么obj.foo()
可以正確輸出呢?原因在于這種調(diào)用方式會(huì)[隱式綁定](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20&%20object%20prototypes/ch2.md)到執(zhí)行這個(gè)方法的對(duì)象上(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,)