SyntaxError: super() is only valid in derived class constructors
Der JavaScript-Ausnahmefehler "super() ist nur in abgeleiteten Klassenkonstruktoren gültig" tritt auf, wenn der super()-Aufruf an einem Ort verwendet wird, der nicht der Körper eines Konstruktors in einer Klasse mit dem extends-Schlüsselwort ist.
Meldung
SyntaxError: 'super' keyword unexpected here (V8-based) SyntaxError: super() is only valid in derived class constructors (Firefox) SyntaxError: super is not valid in this context. (Safari)
Fehlertyp
SyntaxError
Was schiefgelaufen ist
Der super()-Aufruf wird verwendet, um den Basiskonstruktor einer abgeleiteten Klasse aufzurufen, damit die Basisklasse das this-Objekt initialisieren kann. Die Verwendung an einem anderen Ort ergibt keinen Sinn.
super() kann auch in einer Arrow-Funktion definiert werden, die innerhalb des Konstruktors geschachtelt ist. Es kann jedoch in keiner anderen Art von Funktion definiert werden.
Beispiele
>Ungültige Fälle
Sie können super() nicht aufrufen, wenn die Klasse kein extends hat, da keine Basisklasse vorhanden ist, die aufgerufen werden könnte:
class Base {
constructor() {
super();
}
}
Sie können super() nicht in einer Klassenmethode aufrufen, selbst wenn diese Methode vom Konstruktor aufgerufen wird:
class Base {}
class Derived extends Base {
constructor() {
this.init();
}
init() {
super();
}
}
Sie können super() nicht in einer Funktion aufrufen, selbst wenn die Funktion als Konstruktor verwendet wird:
function Base(x) {
this.x = x;
}
function Derived() {
super(1);
}
Object.setPrototypeOf(Derived.prototype, Base.prototype);
Object.setPrototypeOf(Derived, Base);
Gültige Fälle
Sie können super() aufrufen, bevor Sie eine andere Methode im Konstruktor aufrufen:
class Base {}
class Derived extends Base {
constructor() {
super();
this.init();
}
init() {
// …
}
}
Sie können super() in einer Arrow-Funktion aufrufen, die innerhalb des Konstruktors geschachtelt ist:
class Base {}
class Derived extends Base {
constructor() {
const init = () => {
super();
};
init();
}
}