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 bestimmten Konstruktorfunktion und einem Prototyp.
Diese Vorgehensweise hat mehrere erhebliche Nachteile:
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 einfachere 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3