js中apply、call和bind的区别
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢。
在说区别之前还是先总结一下三者的相似之处:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以传入参数。
var person= {
name: "小王",
gender: "男",
age: 24,
say: function() {
alert(this.name + " , " + this.gender + " ,今年" + this.age);
}
}
var newPerson = {
name: '小李',
gender: '女',
age:20
}
person.say()
这时候alert内容是person里面的 小王,男,24
那么如何用person的say方法来显示xh的数据呢。
对于call可以这样:
person.say.call(newPerson)
对于apply是这样的:
person.say.apply(newPerson)
对于bind是这样的:
person.say.bind(newPerson)()
以上三种方式都是把say函数里面的this指向了newPerson 得到的结果是一样的 小李,女,20
我们把例子稍微改写一下。
var person= {
name: "小王",
gender: "男",
age: 24,
say: function(country,city) {
alert(this.name + " , " + this.gender + " ,今年" + this.age, + country + ',' + city);
}
}
var newPerson = {
name: '小李',
gender: '女',
age:20
}
person.say('中国','上海') // 小王, 男,24,中国,上海
call方法是这样:
person.say.call(newPerson, '中国',上海)
对于apply是这样的:
person.say.apply(newPerson,['中国', '上海'])
对于bind是这样的:
person.say.bind(newPerson)('中国', '上海')
以上三种方式都是把say函数里面的this指向了newPerson 得到的结果是一样的 小李,女,20, 中国, 上海