Потеря области видимости с помощью прослушивателя событий [duplicate]

1

Поэтому у меня есть объявление класса, и в моем конструкторе я хочу добавить прослушиватель событий при прокрутке окна. Что-то вроде этого:

class MyClass {
    constructor(el, options) {
        // (...) initiating this properties and methods
        $window.on('scroll', this.onScroll);
    }

Когда я добавляю мой слушатель событий я потерять this сфера (OnScroll() создает свой собственный this экземпляр), но если я использую $window.on('scroll',() => this.scroll()); Я сохраняю this сферу. Есть ли способ сохранить мой охват и не использовать функцию стрелки?

Теги:

2 ответа

3

Вы можете использовать функцию # bind. Он возвращает функцию, привязанную к данному контексту.

class MyClass {
    constructor(el, options) {
        $window.on('scroll', this.onScroll.bind(this));
    }
}
2

Сделайте это, как показано ниже:

class MyClass {
    constructor(el, options) {        
        $window.on('scroll', this.onScroll.bind(this));
    }
}

Или просто измените способ определения функцииScroll:

this.onScroll = () => { ... }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню