PC
Size: a a a
PC
🧝
A
j
A
AF
AF
A
AF
R
К
DM
DM
DM
DM
P
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) ); // работает, не вызывая первоначальную функцию (кешируется)P
worker.slow(2), точка передаёт передаёт в функцию slow референсный тип самого worker-а, из-за этого когда эта функция выполняется, её this равняется самому объекту worker. Так?DM
TJ
p