Jetzt, da JavaScript Klassen hat, frage ich mich, wie es möglich ist, einen Superkonstruktor außerhalb eines Klassenkonstruktors aufzurufen.Wie rufe ich einen Superkonstruktor außerhalb eines Konstruktors auf?
Mein erfolglos naiver Versuch (Ergebnisse in einer Syntax):
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); }
}
Ich bin mir bewusst, dass ein Super-Konstruktor in einer anderen Sprache wie Java kann nur innerhalb des Konstruktor einer abgeleiteten Klasse aufgerufen werden, aber ES6 Klassen sind syntaktischer Zucker für prototypbasierte Vererbung, also würde ich mich wundern, wenn dies mit integrierten Sprachfunktionen nicht möglich wäre. Ich kann einfach nicht die richtige Syntax herausfinden.
Das Beste, was ich mit so gekommen, fühlt sich weit schrecklich wie Betrug:
class A
{
constructor() { this.a = 1; }
}
function initB()
{
let newThis = new A();
newThis.b = 2;
return newThis;
}
class B extends A
{
constructor() { return initB(); }
}
Was verhindert, dass Sie den Standard verwenden? Klasse B erweitert A {constructor() {super(); this.b = 2; }} ', wie es sein soll? – Bergi
Ihre "Lösung" ist eigentlich ein Syntaxfehler. – Bergi
@Bergi Ich weiß, mein erster Ansatz ist ein Syntaxfehler, darum frage ich. Ich habe meine Frage geklärt, danke. –