Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. JavaScript-Fehlerreferenz
  5. ReferenceError: super() zweimal im Konstruktor der abgeleiteten Klasse aufgerufen

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

View in EnglishAlways switch to English

ReferenceError: super() zweimal im Konstruktor der abgeleiteten Klasse aufgerufen

Die JavaScript-Ausnahme "super() zweimal im Konstruktor der abgeleiteten Klasse aufgerufen" tritt auf, wennsuper() ein zweites Mal für einen gegebenen Konstruktor einer abgeleiteten Klasse aufgerufen wird.

Meldung

ReferenceError: Super constructor may only be called once (V8-based)ReferenceError: super() called twice in derived class constructor (Firefox)ReferenceError: 'super()' can't be called more than once in a constructor. (Safari)

Fehlertyp

ReferenceError

Was ging schief?

Der Aufruf vonsuper() kann höchstens einmal für jedennew-Aufruf eines Konstruktors einer abgeleiteten Klasse erfolgen. Dies liegt daran, dasssuper() für die Initialisierung der Elternklasse verantwortlich ist und ein mehrfacher Aufruf dazu führen würde, dass der Konstruktor der Elternklasse mehrmals aufgerufen wird.

Der beste Weg, dies zu verhindern, besteht darin, sicherzustellen, dasssuper() außerhalb jeder Kontrollstruktur platziert wird. Andernfalls sollten Sie sicherstellen, dass alle Codepfade im Konstruktor nur zu einemsuper()-Aufruf führen.

Dersuper()-Aufruf kann in einer verschachtelten Arrow-Funktion im Konstruktor "gespeichert" werden. Wenn Sie dann die Arrow-Funktion aufrufen, wird auchsuper() aufgerufen, und es gilt die gleiche Regel: Die Arrow-Funktion kann höchstens einmal aufgerufen werden.

Beispiele

Ungültige Fälle

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

Manchmal kann der Fehler subtiler sein.

js
class Base {  constructor(flavor) {    // Do something with the flavor  }}class Derived extends Base {  constructor(flavors) {    if (flavors.includes("chocolate")) {      super("chocolate");    }    if (flavors.includes("vanilla")) {      super("vanilla");    }  }}

Ursprünglich könntenflavors möglicherweise nie gleichzeitig "chocolate" und "vanilla" enthalten, aber falls dies jemals der Fall ist, wird der Konstruktorsuper() zweimal aufrufen. Sie müssen überdenken, wie Ihre Klasse strukturiert sein sollte, um dieses Problem zu vermeiden.

Gültige Fälle

js
class Base {}class Derived extends Base {  constructor() {    super();    // More initialization logic  }}

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp