在 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/