@Romario5891

Почему при клике на кнопку выводится NaN?

Почему в коде ниже ответ при клике на кнопку выводится NaN?
'use strict';
class GOD{
  constructor(){
    this.counter = 0;
  }
  handleClick(){
   this.counter+=1;
    console.log(this.counter)
  }
}

const buton = document.querySelector("button");
const cls = new GOD();
buton.addEventListener("click", cls.handleClick);
  • Вопрос задан
  • 303 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что this в момент вызова события указывает на элемент button, а не на cls.
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
потому что handleClick теряет свой контекст. Решается так:

buton.addEventListener("click", ()=>cls.handleClick());


или так

buton.addEventListener("click", cls.handleClick.bind(cls));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Почему в коде ниже ответ при клике на кнопку выводится NaN?

Потому что вы не понимаете что такое контекст. Изучите внимательно тему про this в javascript.

Решение без объяснения
const cls = new GOD();
buton.addEventListener("click", cls.handleClick.bind(cls));
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы