Heim  >  Artikel  >  Web-Frontend  >  Problem mit anonymen Klasseninstanzen: Wann und wie kann man diese JavaScript-Falle vermeiden?

Problem mit anonymen Klasseninstanzen: Wann und wie kann man diese JavaScript-Falle vermeiden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-20 12:34:30831Durchsuche

Gotcha with Anonymous Class Instances: When and How to Avoid this JavaScript Pitfall?

Anonyme Klasseninstanz: Eine Falle in JavaScript

In ES6 können Programmierer anonyme Klassen mit dem Schlüsselwort class definieren und sie sofort mit dem neuen Operator instanziieren:

<code class="javascript">var entity = new class {
    constructor(name) { this.name = name; }
    getName() { return this.name; }
}('Foo');</code>

Obwohl dies praktisch erscheinen mag, ist es wichtig, das zugrunde liegende Verhalten und mögliche Nachteile zu verstehen.

Hinter den Kulissen

Hinter den Kulissen erstellt der neue Klassenausdruck einen neuen Konstruktor Funktion und Prototypobjekt bei jeder Auswertung. Dies unterscheidet sich von regulären Klassendeklarationen, die einen einzelnen Konstruktor und Prototyp definieren, die von allen Instanzen gemeinsam genutzt werden.

Vorbehalte

a. Übermäßiger Speicherverbrauch:

Bei der sofortigen Instanziierung werden jedes Mal ein neuer Konstruktor und Prototyp erstellt, wenn ein Objekt mit dem neuen Klassenausdruck erstellt wird. Dies kann zu unnötigem Speicherverbrauch führen, insbesondere wenn zahlreiche Objekte instanziiert werden.

b. Fehlende Vererbung:

Objekte, die mit dem neuen Klassenmuster erstellt wurden, erben nicht vom übergeordneten Konstruktor und haben keinen gemeinsamen Prototyp. Daher verlieren sie die Vorteile von Klassen, wie Vererbung, Wiederverwendung von Methoden und Polymorphismus.

Missverständnis von Singleton-Objekten

Einige Entwickler verwenden dieses Muster möglicherweise, um Singleton-Objekte zu erstellen, es ist jedoch nicht effektiv. Auf die Konstruktorfunktion kann weiterhin zugegriffen werden, und eine zweite Instanz kann mithilfe von „new entity.constructor“ erstellt werden, was dem Zweck eines Singletons widerspricht.

Vermeidungsempfehlung

Aufgrund dieser Nachteile wird dringend davon abgeraten Verwendung des neuen Klassenmusters. Bevorzugen Sie stattdessen traditionelle Objektliterale aus Gründen der Einfachheit, Lesbarkeit und Instanziierungseffizienz:

<code class="javascript">var entity = {
    name: 'Foo',
    getName() { return this.name; }
};</code>

Das obige ist der detaillierte Inhalt vonProblem mit anonymen Klasseninstanzen: Wann und wie kann man diese JavaScript-Falle vermeiden?. 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