相似点:
- 都是用来改变函数的this对象的指向
- 第一个参数都是this要指向的对象
- 都可以利用后续参数传参
区别:
var xw = {
name:'小王',
gender:'男',
age:24,
say:function(){
console.log(this.name+','+this.gender+",今年"+this.age);
}
}
var xh = {
name:'小红',
gender:'女',
age:18,
}
xw.say(); //小王,男,今年24
对于call:
xw.say.call(xh);
对于apply:
xw.say.apply(xh);
对于bind:
xw.say.bind(xh)();
- call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来调用才可以。
var xw = {
name:'小王',
gender:'男',
age:24.
say:function(school,grade){
console.log(this.name+','+this.gender+',今年'+this.age+',在'+school+'上'+grade);
}
}
var xh = {
name:'小红',
gender:'女',
age:18
}
可以看到say方法多了两个参数,我们通过call/apply的参数进行传参。
对于call:
xw.say.call(xh,'实验小学','六年级');
对于apply:
xw.say.apply(xh,['实验小学','六年级']);
- call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素和say方法中是一一对应的,这就是两者最大的区别。
对于bind:
-
可以像call一样传参
xw.say.bind(xh,'实验小学','六年级')(); -
由于返回的仍然是一个函数,所以可以再调用的时候再进行传参
xw.say.bind(xh)('实验小学','六年级')