@700Hp

Почему массив внутри класса становится Undefined?

Проблема в том, что при итерации массива он становится undefined и любой вызов консоль лога, за пределами итерации, до и после, показывает так же undefined.
Но если закомнтировать forEach, то он отображает массив.

Не работает:
export class DomListener {
  constructor($root, listeners) {
    if (!$root) {
      throw new Error('No $root provided for DomListener')
    }
    this.$root = $root
    this.listeners = listeners
  }

  initDomListeners() {
    console.log(this.listeners)
    this.listeners.forEach((listener) => {
      console.log(listener)
      // const method = 'on' + capitalize(listener)
      // console.log(method)
      // this.$root.on(listener, () => {})
    })
  }

  removeDomListeners() {}


Скриншо отладки
6152d7918683f238934430.png

Вот так уже работает:
export class DomListener {
  constructor($root, listeners) {
    if (!$root) {
      throw new Error('No $root provided for DomListener')
    }
    this.$root = $root
    this.listeners = listeners
  }

  initDomListeners() {
    console.log(this.listeners)
    // this.listeners.forEach((listener) => {
    //   console.log(listener)
    //   const method = 'on' + capitalize(listener)
    //   console.log(method)
    //   this.$root.on(listener, () => {})
    // })
  }

  removeDomListeners() {}
}


Панель отладки:
6152d7ef3e3a2759334874.png

В данный класс поступает несколько массивов, и в случае если он пустой, то передаёт undefined.
Соответсвенно работать должно только с не пустым массивом. При чём, что интересно, час назад этот код ещё работал.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вот так уже работает
Ну где же оно работает, если у вас 3 раза вывелось undefined и один раз массив? Просто вы перестаёте обращаться к несуществующему свойству и код не падает на первой же итерации. Однако никакой массив ничем не становится, такое значение туда и пришло. Ещё один вариант - this в момент исполнения указывает уже не на объект класса.

Если у вас может не быть массива, по условиям задачи, пишите, например, так:
(this.listeners || []).forEach(...)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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