Загрузка...

This и контекст

Тема в разделе Node.js создана пользователем lounya 30 окт 2022. (поднята 30 окт 2022) 278 просмотров

  1. lounya
    lounya Автор темы 30 окт 2022 Комбайн Стим: lolz.live/threads/4271274 6226 15 апр 2016
    есть сниппет
    JavaScript
    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) ); // работает, не вызывая первоначальную функцию (кешируется)
    каким образом this на 18 строке получает контекст не своей функции, не функции выше, а именно обьекта worker? при этом не переданного в функцию на прямую. если передавать в функцию метод обьекта, то, как известно, контекст теряется. даже так this магически, с проебанным контекстом, понимает что ему нужен конкретный обьект переданный двумя оболочками выше в cachingDecorator. как? а главное почему так происходит?
    Ограничение ответов в теме:
    Автор темы разрешил отвечать в теме только этим группам (и вышестоящим): Местный, Команда форума и Кураторы.
     
  2. lounya
    lounya Автор темы 30 окт 2022 Комбайн Стим: lolz.live/threads/4271274 6226 15 апр 2016
    из того до чего я смог допетрить, это то, что func на 18 строке является методом worker и this подсасывает this ближайшего к ней обьекта. но все ровно поебота какая-то
     
  3. lounya
    lounya Автор темы 30 окт 2022 Комбайн Стим: lolz.live/threads/4271274 6226 15 апр 2016
    я феноменальный долбаеб:
    cachingDecorator становится методом обьекта и по этому this ссылается на worker. всем спасибо за внимание
     
Загрузка...
Top