Теперь, когда JavaScript имеет классы, мне интересно, как можно вызвать супер-конструктор вне конструктора класса.Как вызвать супер конструктор вне конструктора?
Моя неудачная попытка наивны (результаты в SyntaxError):
class A
{
constructor() { this.a = 1; }
}
function initB()
{
super(); // How to invoke new A() on this here?
this.b = 2;
}
class B extends A
{
constructor() { initB.call(this); }
}
Я знаю, что в каком-то другом языке, как Java супер конструктор может быть вызван только внутри конструктора производного класса, но ES6 классы - это синтаксический сахар для наследования на основе прототипов, поэтому я был бы удивлен, если бы это было невозможно с использованием встроенных функций языка. Я просто не могу понять правильный синтаксис.
Лучшего, что я пришел с до сих пор чувствует себя ужасно, как обман:
class A
{
constructor() { this.a = 1; }
}
function initB()
{
let newThis = new A();
newThis.b = 2;
return newThis;
}
class B extends A
{
constructor() { return initB(); }
}
Что мешает вам использовать стандартный класс B extends A {constructor() {super(); this.b = 2; }} ', как это должно быть? – Bergi
Ваше «решение» на самом деле является синтаксической ошибкой. – Bergi
@Bergi Я знаю, что мой первый подход - синтаксическая ошибка, вот почему я спрашиваю. Я разъяснил свой вопрос, спасибо. –