Код конструктора недоступен
Я передаю метод класса в качестве параметра для создания нового класса следующим образом:
class Abc {
constructor() {
this.a = () => { };
}
b = new Def(this.a);
}
Я получаю сообщение "Не могу прочитать свойство a undefined" в консоли браузера. Почему a
undefined
внутри b = new Def(this.a)
? При отладке я обнаружил, что браузер выдает ошибку и код конструктора никогда не достигается. Почему это происходит?
Примечание: я использую babel, поэтому я могу использовать поля класса и, следовательно, b = new Def()
правильный синтаксис здесь.
1 ответ
Вот как работают поля классов, они оцениваются до тела конструктора (но после super()
). Строка 1 оценивается перед строкой 2, и порядок, в котором конструктор и b
поля упорядочены не имеет значения:
constructor() {
this.a = () => { }; // 2
}
b = new Def(this.a); // 1
Поскольку поля класса уже используются, для поддержания правильного порядка выполнения они должны быть:
a = () => { }; // 1
b = new Def(this.a); // 2
constructor() {}