在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢。
相同之处:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参。
var wx = {
name : "老王",
gender : "男",
age : 24,
say : function() {
console.log(this.name + " , " + this.gender + " ,今年" + this.age);
}
}
var qq = {
name : "小红",
gender : "女",
age : 18
}
wx.say(); // 老王 , 男 ,今年24
那么如何用wx的say方法来显示qq的数据呢。
1、call
wx.say.call(qq); // 小红 , 女 ,今年18
2、apply
wx.say.apply(qq); // 小红 , 女 ,今年18
3、bind(注意使用bind的时候需要再调用一下方法)
wx.say.bind(qq)(); // 小红 , 女 ,今年18
注意区别来了
var wx = {
name : "老王",
gender : "男",
age : 24,
say : function(school, grade) {
console.log(this.name + " , " + this.gender + " ,今年" + this.age + "在" + school + "上" +grade);
}
}
var qq = {
name : "小红",
gender : "女",
age : 18
}
1、call
wx.say.call(qq,"师大附中","三年级"); // 小红 , 女 ,今年18在师大附中上三年级
2、apply
wx.say.apply(qq,["北大附中","三年级"]); // 小红 , 女 ,今年18在北大附中上三年级
3、bind
wx.say.bind(qq,"清华附中","三年级")(); // 小红 , 女 ,今年18在清华附中上三年级
或 wx.say.bind(qq)("清华附中","三年级");
所以他们的区别是call可以有多个参数,apply只能有两个参数,第二个参数可以使用数组,bind每次使用是都要调用一次,不然将返回一个函数。