@Shimpanze

Почему не видит 'this' в объекте внутри класса?

Почему не видит this объекта внутри класса?

Код:

class foo {

    o = {
        bar: `Привет`,
        baz: this.bar + `, Мир!` // <<< не видит
    };

}


Вызов: console.log( new foo().o.baz );

На выходе: undefined, Мир!
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
RAX7
@RAX7
Такая форма объявления свойств эквивалентна следующей:
class Foo {
  constructor() {
    this.o = {
      bar: `Привет`,
      // baz: this.o.bar <- Ошибка, this.o еще не определен, т.к сначала выполняется правая часть выражения присваивания
    };
    
    // Здесь this.o уже определено, можно присвоить ему новое свойство
    this.o.baz = this.o.bar + `, Мир!`;
  }
}
console.log(new Foo().o.baz);


более простой пример:
const x = { x: x }
здесь сначала выполняется правая часть выражения { x: x }, но сама переменная x еще не определена в этот момент, поэтому код выбросит ошибку Cannot access 'x' before initialization
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Yaroslav1734
Вы объявляете bar в словаре а не в классе, вот решение:

class foo {
    
    bar = `Привет`;
    o = {
        baz: this.bar + `, Мир!`
    };

}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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