Funktionsausdrücke und statisches Verhalten in JavaScript
Bei Verwendung des neuen Schlüsselworts mit einem JavaScript-Funktionsausdruck glauben einige Entwickler möglicherweise fälschlicherweise, dass das Ergebnis Objekt verhält sich statisch. Diese Annahme ist jedoch nicht ganz korrekt.
Das Schlüsselwort new erstellt eine neue Instanz eines Objekts und der Funktionsausdruck wird zum Konstruktor für diese Instanz. Während das resultierende Objekt möglicherweise ein statisches Verhalten aufweist, z. B. dass es ohne Instanziierung zugänglich ist, verfügt es dennoch über eine Konstruktoreigenschaft, die auf die anonyme Funktion verweist.
Betrachten Sie das bereitgestellte Beispiel:
var gameData = new function () { // ... };
Auch wenn das neue Schlüsselwort verwendet wird, ist es immer noch möglich, zusätzliche Objekte mit dem gameData-Konstruktor zu instanziieren:
var gameData2 = new (gameData.constructor)();
Das bedeutet, dass die Das gameData-Objekt ist nicht wirklich statisch. Stattdessen wird die Eigenschaft „Konstruktor“ „durchgesickert“, sodass mehrere Instanzen erstellt werden können. Darüber hinaus wird ein Prototypobjekt für gameData erstellt, was zu unnötiger Komplexität führen kann, wenn private Variablen oder Vererbung nicht beabsichtigt sind.
Um ein echtes Singleton-Objekt in JavaScript zu erstellen, sollte man die Verwendung eines anderen Musters wie eines Objekts in Betracht ziehen Literal, aufschlussreiches Modulmuster oder eine dedizierte Konstruktorfunktion, die eine einzelne Instanziierung erzwingt.
Das obige ist der detaillierte Inhalt vonIst ein mit „new' erstellter JavaScript-Funktionsausdruck wirklich statisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!