# call

_apply(context, arg)#

使用一个指定的 this 值和参数数组来调用一个函数

# 参数

  • context (*): func 绑定的this对象。
  • arg(Array): 附加的参数数组

# 返回

  • (*): 函数执行的结果

# 实现

// 余光
Function.prototype._apply = function (obj = window, arg) {
    const key = Symbol();
    obj[key] = this; // 将函数变成对象的内部属性
    const result = obj[key](...arg); // 执行函数
    delete obj[key]; // 删除函数,当做什么都没发生~
    return result;
};

//zy
Function.prototype.myApply = function (context = window, args) {
    const key = Symbol(); // 防止覆盖原有属性
    context[key] = this;
    const result = context[key](...args);
    delete context[key];
    return result;
};
  • Symbol 可以防止覆盖原有属性 👍

# 测试

const consol = function (obj) { console.log(`Hi ${this.name} and ${obj.name}`) }
consol._apply({ name: '小明' }, [{ name: '小红' }]);
// => Hi 小明 and 小红
consol.myApply({ name: '小明' }, [{ name: '小红' }]);
// => Hi 小明 and 小红
上次更新于: 3/23/2022, 10:11:04 AM