Heim >Web-Frontend >js-Tutorial >Wie rufe ich ES6-Klassen ohne das Schlüsselwort „new' auf?

Wie rufe ich ES6-Klassen ohne das Schlüsselwort „new' auf?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 03:18:02519Durchsuche

 How to Invoke ES6 Classes Without the `new` Keyword?

ES6: Umgehen des neuen Schlüsselworts für den Aufruf von Klassenkonstruktoren

In ES6 dienen Klassen nicht nur als Blaupausen für Objekte, sondern verkörpern auch deren Konstruktoren . Die Funktion „constructor()“ dient als Klassenkörper und ihre Ausführung wird beim Aufruf der Klasse ausgelöst. Der Versuch, eine Klasse ohne das erforderliche neue Schlüsselwort aufzurufen, führt jedoch häufig zur Fehlermeldung „Eine Klasse kann nicht als Funktion aufgerufen werden“.

Den Konstruktorimperativ verstehen

Klassen sind von Natur aus an den neuen Operator gebunden, der sicherstellt, dass bei der Instanziierung eine neue Instanz der Klasse erstellt wird. Das Aufrufen einer Klasse ohne „New“ verstößt gegen dieses Entwurfsprinzip und führt zu dem oben genannten Fehler.

Alternative Lösungen

Wenn das gewünschte Verhalten darin besteht, den Klassenaufruf mit oder ohne „New“ zu ermöglichen Es gibt mehrere Alternativen:

1. Verwenden einer regulären Funktion anstelle einer Klasse

Eine reguläre Funktion kann klassenähnliches Verhalten ohne die neue Anforderung nachahmen. Damit kann immer noch instanzähnliches Verhalten erzwungen werden, aber es fehlen die Kapselungs- und Vererbungsfunktionen von Klassen.

<code class="js">function Foo(x) {
  this.x = x;
  this.hello = function() {
    return this.x;
  };
}</code>

2. Erzwingen des neuen Schlüsselworts

Wenn der beabsichtigte Zweck darin besteht, die Klasse immer mit „new“ aufzurufen, sind keine Problemumgehungen erforderlich. Halten Sie sich einfach an das empfohlene Konstruktor-Aufrufmuster:

<code class="js">(new Foo("world")).hello(); // "hello world"</code>

3. Die Klasse mit einer regulären Funktion umschließen

Dieser Ansatz bietet die Flexibilität, die Klasse mit oder ohne new aufzurufen und gleichzeitig die Vorteile der Verwendung von Klassen beizubehalten. Die Wrapping-Funktion ruft den Klassenkonstruktor immer mit new.

<code class="js">class Foo {
  constructor(x) { this.x = x; }
  hello() { return `hello ${this.x}`; }
}

var _old = Foo;
Foo = function(...args) { return new _old(...args) };

Foo("world").hello();       // "hello world"
(new Foo("world")).hello(); // Also works</code>
auf

Das obige ist der detaillierte Inhalt vonWie rufe ich ES6-Klassen ohne das Schlüsselwort „new' auf?. 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