ilyabond
@ilyabond
В яме даннинга крюгера

Как использовать два контекста в методе правильно JS?

Здравствуйте.
Ситуация:
В методе init на кнопку вешаю обработку события. В методе, который обрабатывает событие мне нужен доступ до this объекта в котом объявлены методы, а так же доступ к this объекта кнопки.

Как сейчас решаю проблему:
init() {
    for (let i = 0; i < this.targets.length; i++) {
        this.targets[i].index = i;
        this.targets[i].addEventListener("click", this.animateTab.call(this));
    }
}

animateTab() {
    const context = this;
    return function() {
        // Доступ к <b>this</b> объекта через идентификатор <b>context</b>
        // Доступ к <b>this </b>объекту кнопки через идентификатор <b>this</b>
    }
}


Выглядит как будто такой код переусложнен, много обращений через context. внутри animateTab. Каким образом решить лучше проблему лучше - не придумал. Буду благодарен, если подскажите, спасибо
  • Вопрос задан
  • 78 просмотров
Решения вопроса 2
Mike_Ro
@Mike_Ro Куратор тега JavaScript
Python, JS, WordPress, SEO, Bots, Adversting
Используя стрелочную функцию:
init() {
    this.targets.forEach((target, index) => {
        target.index = index;
        target.addEventListener("click", (event) => this.animateTab(event, this));
    });
}

Используя метод bind():
init() {
    for (let i = 0; i < this.targets.length; i++) {
        this.targets[i].index = i;
        this.targets[i].addEventListener("click", this.animateTab.bind(this));
    }
}
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Почему бы не получать кнопку просто через event.target? А this прибить к вашему объекту.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы