Heim >Web-Frontend >js-Tutorial >Ist ein JavaScript-Funktionsausdruck mit „new' wirklich statisch?

Ist ein JavaScript-Funktionsausdruck mit „new' wirklich statisch?

Susan Sarandon
Susan SarandonOriginal
2024-12-20 12:55:19514Durchsuche

Is a JavaScript Function Expression with `new` Truly Static?

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 :

  • Objektliteral: Verwenden Sie ein einfaches Objektliteral, um Eigenschaften und Methoden ohne ein zu definieren Konstruktor.
  • Modulmuster offenbaren: Schließen Sie das Objektliteral in einen IIFE (Immediately Invoked Function Expression) ein, um Variablen mit Abschlussbereich zu erstellen.
  • Konstruktorklasse ': Definieren Sie eine Konstruktorfunktion, die dasselbe Singleton-Objekt zurückgibt Instanziierung.

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!

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