共同点
- 都是用来改变函数的this的指向
- bind是返回对应函数;apply、call是立即调用
call()
定义:调用一个对象的一个方法,用另一个对象替换当前对象
理解: method1.call(method2,num1,num2) = method1(num1,num2) 即用method1替换method2
例子:
function Animal(){
this.name="animal";
this.showName=function(){
console.log(this.name);
}
}
function Dog(){
this.name="dog";
}
var animal=new Animal();
var dog=new Dog();
animal.showName.call(dog);//输出为dog
最后一段代码(animal.showName.call(dog)),意思是把animal的方法放到dog上执行,也可以说,把animal 的showName()方法放到 dog上来执行,所以this.name 应该是 dog。
apply()
call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
bind()
MDN定义:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
例子:
var bar=function(){
console.log(this.x);
}
var foo={
x:3
}
var func=bar.bind(foo);
func();//输出:3
注意:bind方法的返回值是函数