Heim >Web-Frontend >js-Tutorial >Wie kann ich einen ES6-Klassenkonstruktor ohne das Schlüsselwort „new' aufrufen?

Wie kann ich einen ES6-Klassenkonstruktor ohne das Schlüsselwort „new' aufrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 02:27:27617Durchsuche

How Can I Call an ES6 Class Constructor Without the

ES6-Klassenkonstruktoren ohne „neu“ aufrufen

In ES6 sind Klassen syntaktischer Zucker für Konstruktorfunktionen. Wenn eine Klasse ohne das Schlüsselwort new aufgerufen wird, wird keine neue Instanz der Klasse erstellt. Stattdessen wird die Konstruktorfunktion der Klasse direkt aufgerufen.

Betrachten Sie die folgende Klasse:

<code class="javascript">class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}</code>

Wenn wir versuchen, diese Klasse ohne das Schlüsselwort new aufzurufen, erhalten wir eine Fehlermeldung:

Cannot call a class as a function

Das liegt daran, dass Klassenkonstruktoren darauf ausgelegt sind, neue Instanzen der Klasse zu erstellen. Sie ohne den neuen Operator aufzurufen, entspricht dem Aufruf einer regulären Funktion.

Um den Aufruf eines Klassenkonstruktors ohne das neue Schlüsselwort zu ermöglichen, können wir eine Kombination aus einer Konstruktorfunktion und einer Pfeilfunktion wie folgt verwenden:

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

const FooWithoutNew = () => new Foo(...arguments);</code>

Jetzt können wir den Klassenkonstruktor ohne das Schlüsselwort new mit FooWithoutNew aufrufen:

FooWithoutNew("world").hello(); // "hello world"

Es ist jedoch wichtig zu beachten, dass dieser Ansatz einige Nachteile hat. Erstens muss eine separate Funktion erstellt werden, was unpraktisch sein kann. Zweitens unterbricht es das Verhalten des Konstruktors, eine neue Instanz zurückzugeben.

Im Allgemeinen wird aus Gründen der Klarheit und Konsistenz empfohlen, Klassenkonstruktoren immer mit dem Schlüsselwort new aufzurufen.

Das obige ist der detaillierte Inhalt vonWie kann ich einen ES6-Klassenkonstruktor ohne das Schlüsselwort „new' aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn