In ES6 bietet die Möglichkeit, anonyme Klassen zu definieren, syntaktischen Zucker für Klassendeklarationen. Die sofortige Instanziierung solcher Klassen ist zwar praktisch, kann jedoch zu einer Vielzahl von Problemen führen.
Wenn eine anonyme Klasse sofort instanziiert wird, erstellt JavaScript eine neue Konstruktorfunktion und Prototypobjekt dynamisch erstellen. Jede Auswertung des Ausdrucks führt zu einer eindeutigen Konstruktorfunktion und einem eindeutigen Prototyp.
Diese Vorgehensweise weist mehrere wesentliche Nachteile auf:
Mangelnde Wiederverwendbarkeit:
Im Gegensatz zu benannten Klassen erstellen sofort instanziierte anonyme Klassen jedes Mal einen neuen Konstruktor und Prototyp. Dies bedeutet, dass mehrere Instanzen nicht denselben Prototyp gemeinsam nutzen und die Vorteile der Klassenvererbung und der gemeinsamen Nutzung von Prototypen verloren gehen.
Singleton-Irrtum:
Wenn die Absicht hinter der Verwendung dieses Musters darin besteht, etwas zu erstellen Ein Singleton-Objekt schlägt fehl. Die Konstruktorfunktion bleibt zugänglich und ermöglicht die Erstellung mehrerer Instanzen mithilfe des neuen „entity.constructor“.
Der Konsens ist klar: Sofort instanziierte anonyme Klassen sollten vermieden werden. Ein einfaches Objektliteral bietet eine effizientere und unkompliziertere Alternative:
var entity = { name: 'Foo', getName: function() { return this.name; } };
Während das neue Klassenmuster in einigen anderen Sprachen akzeptabel ist, verhält es sich in JavaScript anders . Die dynamische Natur der Klassenerstellung in JavaScript schließt die Vorteile dieser Sprachen aus.
Das obige ist der detaillierte Inhalt vonSind sofort instanziierte anonyme Klassen in ES6 eine schlechte Idee?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!