SyntaxError: super() ist nur in Konstruktoren abgeleiteter Klassen gültig
Die JavaScript-Ausnahme „super() ist nur in Konstruktoren abgeleiteter Klassen gültig“ tritt auf, wenn der Aufruf von super()
an einer Stelle erfolgt, die nicht der Rumpf eines Konstruktors in einer Klasse mit dem Schlüsselwort extends
ist.
Nachricht
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
Was schiefgelaufen ist
Der Aufruf super()
wird verwendet, um den Basiskonstruktor einer abgeleiteten Klasse aufzurufen, damit die Basisklasse das this
Objekt initialisieren kann. Die Verwendung an anderer Stelle ist nicht sinnvoll.
super()
kann auch in einer Arrow-Funktion definiert werden, die innerhalb des Konstruktors verschachtelt 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 es keine Basisklasse zum Aufrufen gibt:
class Base {
constructor() {
super();
}
}
Sie können super()
nicht in einer Klassenmethode aufrufen, selbst wenn diese Methode aus dem 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 verschachtelt ist:
class Base {}
class Derived extends Base {
constructor() {
const init = () => {
super();
};
init();
}
}