Такая форма объявления свойств эквивалентна следующей:
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