Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
let test = { rese: "assd", asd() { alert(this.rese); } }; function delay(f) { return function() { f.apply(this); }; } let testThis = delay(test.asd); testThis();
Хотя контекст задан правильно.
{ let test = { rese: "assd", asd() { console.log(this.rese); } }; function delay(f) { return function() { f() }; } let testThis = delay(test.asd.bind(test)); testThis(); }
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) ); // работает, не вызывая первоначальную функцию (кешируется)
worker.slow = cachingDecorator(worker.slow); ^
f.apply(this);
worker.slow(2)