Heim >Web-Frontend >js-Tutorial >Wie rufe ich ES6-Klassen ohne das Schlüsselwort „new' auf?
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!