JavaScript中修改this指向的方法

2,178 阅读1分钟

主要有三种方法: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一样!