Heim > Web-Frontend > js-Tutorial > Hauptteil

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

Susan Sarandon
Freigeben: 2024-10-26 03:18:02
Original
462 Leute haben es durchsucht

 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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!