@qpz

Почему свойство в классе JS не меняется его методом?

Я хочу объявить в конструкторе свойство, в которое бы записывались значения из других методов и оно было бы доступно для работы этим методам, как это лучше сделать? Мой вариант ниже, this.value не хочет принимать значение метода handler :(

class NewClass {
  value = null;
  constructor() {
    this.elem = document.createElement("div");
    this.elem.innerHTML = "5";
    document.body.append(this.elem);
  }
  handler() {
    this.elem.addEventListener("click", function(e) {
      // присваиваем свойству значение, но оно не присваивается :(
      this.value = e.target.textContent;
    });
  }
  viewValue() {
    //а так присваивается ¯\_(ツ)_/¯
    this.value = 0;
    this.handler();
    console.log(this.value);
  }
}

let a = new NewClass();
a.viewValue();
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 1
@xnkka
В метод нужно передать контекст класса
class NewClass {
      value = null;
      constructor() {
        this.elem = document.createElement("div");
        this.elem.innerHTML = "5";
        document.body.append(this.elem);
      }
      handler() {
        this.elem.addEventListener("click", this.setValue.bind(this));
      }
      viewValue() {
        //а так присваивается ¯\_(ツ)_/¯
        this.value = 0;
        this.handler();
        console.log(this.value);
      }
      setValue(e) {
        // присваиваем свойству значение, но оно не присваивается :(
        this.value = e.target.textContent;
      }
    }
Ответ написан
Ваш ответ на вопрос

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

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