Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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:

js
class Base {
  constructor() {
    super();
  }
}

Sie können super() nicht in einer Klassenmethode aufrufen, selbst wenn diese Methode vom Konstruktor aufgerufen wird:

js
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:

js
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:

js
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:

js
class Base {}

class Derived extends Base {
  constructor() {
    const init = () => {
      super();
    };

    init();
  }
}

Siehe auch