При расширении родительского класса и объявлении свойств дочернего класса с помощью подключаемого модуля Babel «transform-class-properties» любые свойства класса дочернего класса недоступны через метод конструктора родительского класса.
class One {
internal = 1;
constructor() {
console.log('constructor internal', this.internal);
}
}
class Two extends One {
internal = 2;
}
new Two();
В приведенном выше примере на консоль будет выводиться «внутренний конструктор 1». При взгляде на скомпилированный код становится очевидным, почему сначала выполняется родительский класс, а затем результирующий объект интегрируется с дочерним классом.
Извиняюсь, если это задумано, но это смутило меня, поскольку следующий код работает так, как я ожидаю, в методах, не являющихся конструкторами (поэтому метод boot() ссылается на значение свойства «внутреннее» дочернего класса):
class One {
internal = 1;
constructor() {
console.log('constructor internal', this.internal);
}
boot() {
console.log('boot internal', this.internal);
}
}
class Two extends One {
internal = 2;
constructor() {
super();
this.boot();
}
}
new Two();
Таким образом, даже при вызове метода, объявленного в родительском классе, он наследует свойства дочернего класса. Это просто методы конструктора, которые, по-видимому, ведут себя не так, как ожидалось (по крайней мере, для меня - опять же, извиняюсь, если это неправильно интерпретировано, но на соответствующей странице Babel нет никаких предостережений.)
Спасибо.
boot
из конструктора, а делатьnew Two().boot()
) - person Bergi   schedule 23.08.2016