SyntaxError: Verwendung von Super-Eigenschaften/-mitgliedern ist nur innerhalb von Methoden oder eval-Code innerhalb von Methoden gültig

Die JavaScript-Ausnahme "Verwendung von Super-Eigenschaften/-mitgliedern ist nur innerhalb von Methoden oder eval-Code innerhalb von Methoden gültig" tritt auf, wenn die super.x oder super[x] Syntax außerhalb einer Methode verwendet wird.

Meldung

SyntaxError: 'super' keyword unexpected here (V8-based)
SyntaxError: use of super property accesses only valid within methods or eval code within methods (Firefox)
SyntaxError: super is not valid in this context. (Safari)

Fehlertyp

Was ist schiefgelaufen?

Die super.x Syntax wird verwendet, um auf Eigenschaften des Prototyps des aktuellen Objekts zuzugreifen. Sie kann in Methoden sowohl von Objektliteralen als auch von Klassen, Feldinitialisierern und statischen Initialisierungsblöcken verwendet werden, jedoch nicht in anderen Kontexten.

Beispiele

Ungültige Fälle

Sie können super.x nicht außerhalb einer Methode in einem Objekt verwenden:

js
const obj = {
  __proto__: { x: 1 },
  x: super.x, // SyntaxError
};

Sie können super.x nicht in einer Funktion verwenden, selbst wenn diese Funktion die Wirkung einer Methode hat:

js
function getX() {
  return super.x; // SyntaxError
}

const obj = {
  getX,
  getX2: function () {
    return super.x; // SyntaxError
  },
};

class Derived extends Base {
  getX = () => super.x;
}

Gültige Fälle

Sie können super.x in einer Methode verwenden:

js
class Base {
  x = 1;
}

class Derived extends Base {
  getX() {
    return super.x;
  }
}

Sie können super.x in einem Feldinitialisierer verwenden:

js
class Derived extends Base {
  x = super.x;
}

Sie können super.x auch in Objektmethoden verwenden:

js
const obj = {
  __proto__: { x: 1 },
  getX() {
    return super.x;
  },
};

Siehe auch