const user = {
name: 'user ',
age: function () {
console.log(this.name)
}
}
const person= {
name: 'person',
age: function () {
console.log(this.name)
}
}
call的用法:
1. 未改变this指向之前
user.age()
2. 改变this指向之后
user.age.call(person)
3.如果还需要传递其他参数
user.age.call(person, '参数一', '参数二','参数三')
> 当后面的参数个数过多时,使用call的话就比较繁琐了
> (一般参数过多时,我们一般会传递数组比较省事,apply由此诞生了,这也是call和apply的唯一区别)
apply的用法:
1. 未改变this指向之前
user.age()
2. 改变this指向之后
user.age.apply(person)
3.如果还需要传递其他参数
const arr = ['参数一', '参数二','参数三']
user.age.call(person, arr)
bind的用法:
1. 未改变this指向之前
user.age()
2. 改变this指向之后
user.age.bind(person)()
3.如果还需要传递其他参数
user.age.bind(person, '参数一', '参数二','参数三')
> bind与call参数传递方式完全相同,唯一区别call回立即调用函数,bind返回的是一个新的函数,需要手动调用
共同点:
1、都是用来改变this的指向
2、第一个参数都是this要指向的对象(这个对象的this指向哪,改变之后的this就指向哪)
3、后续参数,根据实际需求可以传多个,中间以逗号隔开(apply例外可以直接传递参数数组)
区别:
1、apply的第二个参数需要以数组的方式传递
2、call和bind的后续参数直接用逗号隔开
3、apply和call调用后会立即执行函数, bind最后返回的是一个新的函数,需要再调用一下