call
function showColor(){
console.log("my color is:" + this.color);
}
window.color = "red";
showColor.call(window); //my color is:red
定义l:调用一个对象的一个方法,以另一个对象替换当前对象
apply
function test(arg1,arg2){
......
}
test.call(this,arg1,arg2);
test.apply(this,[arg1,arg2]);
定义:应用某一对象的一个方法,用另一个对象替换当前对象
bind
也可以改变函数体内this的指向
定义:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
function showColor(){
console.log("my color is:" + this.color);
}
window.color = "red";
showColor.bind(window)();
区别
bind方法是创建一个函数,然后可以在需要调用的时候再执行该函数,并非是立即执行函数;而call,apply是在改变了上下文中的this指向后并立即执行函数。