一、作用

  • call和apply都是为了解决改变this的指向。作用都是相同的,只是传参方式不同。
  • 除了第一个参数外,call可以接收一个参数列表,apply只接受一个参数数组。
  • bind和其他两个方法作用同样是能够改变this指向,只是该方法会返回一个函数。并且我们可以通过bind实现柯里化

二、用法示例

const steven = {
    name: 'steven',
    phoneBattery: 70,
    chargeByCall: function (level1, level2) {
        this.phoneBattery = level1 + level2
    },
    chargeByApply: function (level1, level2) {
        this.phoneBattery = level1 + level2
    },
    chargeByBind: function (level1, level2) {
        this.phoneBattery = level1 + level2
    }
}

const tom = {
    name: 'tom',
    phoneBattery: 5,
}

steven.chargeByApply.call(tom, 90, 2); // call传参使用参数列表方式
console.log(tom.phoneBattery); // 92
steven.chargeByApply.apply(tom, [20, 50]); // apply传参使用参数数组方式
console.log(tom.phoneBattery); // 80
const tomCharge = steven.chargeByBind.bind(tom); // bind返回函数,调用该函数实现this指向改变
tomCharge(70, 6);
console.log(tom.phoneBattery); // 76

宸翰
5 声望1 粉丝

每天进步一点点


« 上一篇
ES6之生成器