Это проще показать, чем описать.Вот код
let ns = {};
ns.A = class {
constructor() {
this.Virtual();
}
Virtual() {
}
};
ns.B = class extends ns.A {
constructor() {
super();
alert(this.Field);
}
Field = 0;
Virtual() {
this.Field = 123;
}
}
alert()
говорит, что this.Field
равно 0. То есть инициализация поля в классе B выполняется после завершения конструктора A.Это «по замыслу» в Javascript?
Если я добавлю Field
в прототип класса B, то все будет хорошо, как и на любом другом языке.Например,
let ns = {};
ns.A = class {
constructor() {
this.Virtual();
}
Virtual() {
}
};
ns.B = class extends ns.A {
constructor() {
super();
alert(this.Field);
}
//Field = 0;
Virtual() {
this.Field = 123;
}
}
ns.B.prototype.Field;
Извините, что беспокою вас здесь, но я не знаю, где находится правильное место, чтобы сообщить об этой проблеме.