apply call bind修改this指向的区别
apply
const obj1 = {
name: '大郎',
say: function() {
console.log(this.name);
}
}
const obj2 = {
name:'老王'
}
pbj1.say.apply(obj2)//老王
当say中有传参时
const obj1 = {
name: '大郎',
say: function(a) {
console.log(this.name+a);
}
}
const obj2 = {
name:'老王'
}
//传参时需要以数组的方式传
obj1.say.apply(obj2, ['翻墙'])//老王翻墙
call
const obj1 = {
name: '大郎',
say: function() {
console.log(this.name);
}
}
const obj2 = {
name:'老王'
}
pbj1.say.call(obj2)//老王
当say中有传参时
const obj1 = {
name: '大郎',
say: function(a) {
console.log(this.name + a);
}
}
const obj2 = {
name: '老王'
}
obj1.say.call(obj2, '翻墙') //老王翻墙
bind
const obj1 = {
name: '大郎',
say: function() {
console.log(this.name);
}
}
const obj2 = {
name:'老王'
}
const say = obj1.say.bind(obj2)//返回的是一个函数
say()//老王
当say中有传参时
const obj1 = {
name: '大郎',
say: function(a) {
console.log(this.name + a);
}
}
const obj2 = {
name: '老王'
}
const say = obj1.say.bind(obj2,'翻墙')
say()//老王翻墙
主要区别
apply和call用法上没有特别大的区别,都很好理解,但是apply在传参时需要将参数以数组的方式传进去
而bind返回的是一个函数,与另外两者不同