三种方法用于指定函数内部的 this
指向
call
var rascal = 456;
var keith = {
rascal: 123
};
function a() {
console.log(this.rascal);
}
a.call(this); //456
a.call(keith); //123
apply - 参数传数组
function keith(a, b) {
console.log(a + b);
}
keith.call(null, 2, 3); //5
keith.apply(null, [2, 3]); //5
bind - 返回一个新函数。bind 方法并非立即执行一个函数。
var keith = {
a: 1,
count: function() {
console.log(this.a++);
}
};
var f = keith.count.bind(keith);
f(); //1
f(); //2
f(); //3
来源
三种方法都是继承自 Function.prototype
console.log(Function.prototype.hasOwnProperty('call')) // true
console.log(Function.prototype.hasOwnProperty('apply')) // true
console.log(Function.prototype.hasOwnProperty('bind')) // true