„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können Sie in ES6 einen Klassenkonstruktor ohne „new“ aufrufen?

Können Sie in ES6 einen Klassenkonstruktor ohne „new“ aufrufen?

Veröffentlicht am 07.11.2024
Durchsuche:579

 Can You Call a Class Constructor Without \'new\' in ES6?

Aufruf des Klassenkonstruktors ohne neues Schlüsselwort in ES6

Gegebene Klassendefinition:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

Es ist nicht möglich, den Klassenkonstruktor ohne das Schlüsselwort new direkt aufzurufen. Dies liegt daran, dass Klassen in ES6 von Natur aus über eine Konstruktorfunktion verfügen, die aufgerufen wird, wenn die Klasse aufgerufen wird.

Der Aufruf einer Klasse ohne neue führt zu einem Fehler:

Cannot call a class as a function

Diese Fehlermeldung weist deutlich darauf hin, dass der Klassenkonstruktor nur mit dem neuen Operator aufgerufen werden kann, der zum Erstellen einer neuen Instanz der Klasse erforderlich ist.

Um diese Einschränkung zu überwinden, sollten Sie die folgenden Ansätze in Betracht ziehen :

  • Verwenden Sie stattdessen eine reguläre Funktion:
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • Rufen Sie die Klasse immer mit new auf:
(new Foo("world")).hello(); // "hello world"
  • Verpacken Sie die Klasse in eine Funktion und rufen Sie mit new:
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3