Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получение this конструктора в функции прототипа (https://javascript.ru/forum/events/72844-poluchenie-konstruktora-v-funkcii-prototipa.html)

Andrew K 02.03.2018 13:59

Получение this конструктора в функции прототипа
 
Здравствуйте. У меня есть конструктор Body где в качестве обработчика перемещения мыши по <body> задается прототипная функция mouseMove. Эта функция при каждом вызове должна изменять свойство num в конструкторе Body. Как получить this конструктора (а через него и свойство num) в обработчике?

Я пробовал поставить ссылку на this через замыкание, но из этого ничего не вышло потому что this в самовызывающейся функции равен undefined, в стрелочной функции Window, а в обработчике <body>.

let Body = function () {
    this.num = 1;

    document.body.addEventListener('mousemove', this.mouseMove);
};


Body.prototype.mouseMove = (function () {
    let num = this.num;

    return function () {
        console.log(num++);
    }
})();


new Body();

Nexus 02.03.2018 15:54

Может так?
function Body() {
    this.num = 1;

    document.body.addEventListener('mousemove', this.mouseMove.bind(this));
};

Body.prototype.mouseMove = function() {
    console.log(this.num++);
};


new Body();

Andrew K 02.03.2018 16:13

Точно! У меня была мысль насчет bind(), но сразу отказался от этой идеи потому что не предполагал, что метод работает с конструкторами.

Большое спасибо!


Часовой пояс GMT +3, время: 18:51.