主要有三种方法:call、apply、bind
1、call改变this指向
let obj = {
name: '张飞',
run: function(a){
console.log(this.name + '跑了,' + a)
}
}
obj.run('obj'); // 张飞跑了,飞
let obj1 = {
name: '黄忠'
}
obj.run.call(obj1, '忠'); // 黄忠跑了,忠
call传任意个参数只需要在后面用 , 分割即可!
2、apply改变this指向
let obj = {
name: '张飞',
run: function(a){
console.log(this.name + '跑了,' + a)
}
}
obj.run('obj'); // 张飞跑了,飞
let obj1 = {
name: '黄忠'
}
obj.run.apply(obj1, ['忠']); // 黄忠跑了,忠
apply传任意个参数只需要在后面用 [] 把需要传递的参数写在数组中才可以!
3、bind改变this指向
let obj = {
name: '张飞',
run: function(a){
console.log(this.name + '跑了,' + a)
}
}
obj.run('obj'); // 张飞跑了,飞
let obj1 = {
name: '黄忠'
}
let bindFun = obj.run.bind(obj1);
bindFun('忠'); // 黄忠跑了,忠
bind会延迟执行,它会返回一个新的方法,需要手动调用才会触发,传参方式和call一样!