javascript - "this"引用如何在以下函数中传输

标签 javascript decorator

在 JS 手册中,我有以下示例,该示例工作正常:

let worker = {
  someMethod() {
    return 1;
  },

  slow(x) {
    alert("Called with " + x);
    return x * this.someMethod(); // (*)
  }
};

function cachingDecorator(func) {
  let cache = new Map();
  return function(x) {
    if (cache.has(x)) {
      return cache.get(x);
    }
    let result = func.call(this, x); // теперь 'this' передаётся правильно
    cache.set(x, result);
    return result;
  };
}

worker.slow = cachingDecorator(worker.slow); // теперь сделаем её кеширующей

alert( worker.slow(2) ); // работает
alert( worker.slow(2) ); // работает, не вызывая первоначальную функцию (кешируется)

问题是:如果 cachingDecorator 没有在对象内部声明,并且像 worker.slow = cachingDecorator(worker.slow) 这样调用,“this”引用如何传输到 cachingDecorator 函数中?我谈论 cachingDecorator 中的这一行:let result = func.call(this, x)

最佳答案

当装饰器实际用作 worker 对象位于点之前时,this 引用会在最后 2 行中传输。

关于javascript - "this"引用如何在以下函数中传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150076/

相关文章:

javascript - 无法将 Element.getBoundingClientRect() 的结果转换为 JSON 值

javascript - 获取按天分组的时间

javascript - jQuery - 在触发警报之前等待变量更新

javascript - 使用 ES6 代理替换原型(prototype)时超出最大调用堆栈大小

python - Django 在模型方法上通过装饰器发送信号?

javascript - 使用装饰器将类方法附加到窗口对象

javascript - 一两分钟后 JQuery 不起作用

javascript - 查找浏览器的主页

python - Airflow 在发生故障时使所有 dags 执行特定操作

Python,有条件地使用装饰器(未在所有环境中安装包)