Ist ein Javascript-Funktionsausdruck, der das Schlüsselwort „new“ verwendet, wirklich statisch?
In einem Versuch, eine statisch ähnliche Klasse in Javascript ohne zu erstellen Unter Verwendung eines Konstruktors oder einer Instanziierung wurde der Code wie folgt geschrieben:
var gameData = new function () { //May need this later this.init = function () { }; this.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } }; }
Es wird davon ausgegangen, dass das Schlüsselwort „new“ dies verhindert Instanziierung und sorgt dafür, dass sich der Funktionsausdruck wie eine statische Klasse verhält. Dies ist jedoch nicht ganz korrekt.
Das „statische“ Konzept in Javascript verstehen
In Javascript ist eine statische Eigenschaft oder Methode nicht an eine Instanz von a gebunden Klasse. Es gehört zur Klasse selbst, unabhängig davon, ob eine Instanz vorhanden ist. Statische Mitglieder werden normalerweise von allen Instanzen einer Klasse gemeinsam genutzt.
Einschränkungen des Funktionsausdruck-Ansatzes
Trotz des Schlüsselworts „new“ verfügt der Funktionsausdruck immer noch über einen Konstruktor Eigentum. Dies bedeutet, dass es mit dem folgenden Code wiederhergestellt werden kann:
var gameData2 = new (gameData.constructor)();
Dadurch wird eine separate Instanz des Funktionsausdrucks erstellt, wodurch das beabsichtigte statische Verhalten negiert wird. Darüber hinaus enthält die Prototypkette ein nutzloses Prototypobjekt für den Funktionsausdruck.
Alternativen zur „statischen“ Implementierung in Javascript
Um echtes statisches Verhalten zu erreichen, sollten Sie diese Alternativen in Betracht ziehen :
Das obige ist der detaillierte Inhalt vonIst ein JavaScript-Funktionsausdruck mit „new' wirklich statisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!