Heim >Web-Frontend >js-Tutorial >Wie kann ich eine statische Klasse oder ein Singleton-Muster ordnungsgemäß in JavaScript implementieren?

Wie kann ich eine statische Klasse oder ein Singleton-Muster ordnungsgemäß in JavaScript implementieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-19 18:45:14955Durchsuche

How Can I Properly Implement a Static Class or Singleton Pattern in JavaScript?

Statische Funktionsausdrücke in Javascript verstehen: Der GameData-Fall

In Javascript sind Funktionsausdrücke, die das Schlüsselwort new verwenden, nicht im gleichen Sinne statisch als ihre C#-Gegenstücke. Anstatt eine wirklich statische Klasse zu erstellen, verliert dieser Ansatz die Konstruktoreigenschaft und generiert ein Prototypobjekt, das wahrscheinlich nicht beabsichtigt ist.

Ein tieferer Einblick in das GameData-Beispiel

Das bereitgestellte Beispiel, gameData, demonstriert die Erstellung einer einzelnen Instanz einer „Klasse“ mithilfe eines Funktionsausdrucks mit dem Schlüsselwort new. Die Einbeziehung der Konstruktoreigenschaft ermöglicht jedoch die Instanziierung zusätzlicher Objekte, wodurch die „Klasse“ nicht statisch wird.

Alternative Singleton-Ansätze

Um eine wahre zu erreichen Um ein Singleton-Muster in Javascript zu erstellen, berücksichtigen Sie die folgenden Methoden:

  • Objektliteral: Erstellen ein einfaches Objektliteral, dem ein Konstruktor und ein Prototyp fehlen.
  • Aufschlussreiches Modulmuster:Verwenden Sie einen sofort aufgerufenen Funktionsausdruck (IIFE), um Variablen mit Abschlussbereich zu erstellen und das gewünschte Objekt zurückzugeben.
  • Konstruktor („Klasse“): Definieren Sie eine Konstruktorfunktion, die beim Aufruf immer denselben Singleton zurückgibt Objekt.

Implementierung des Singleton-Musters

Der folgende Code veranschaulicht das Singleton-Muster mithilfe einer Konstruktorfunktion:

function GameData() {
    if (this.constructor.singleton)
        return this.constructor.singleton;
    else
        this.constructor.singleton = this;

    // Private and public members initialization
}
GameData.prototype.storageAvailable = function () {
    // Availability check logic
};

var gameData = new GameData();
var gameData2 = new GameData();
console.log(gameData === gameData2 === GameData.singleton); // Outputs true

Dieser Ansatz gewährleistet dass nachfolgende Instanziierungsversuche immer dieselbe GameData-Instanz zurückgeben, wodurch ein echtes Singleton-Verhalten entsteht.

Das obige ist der detaillierte Inhalt vonWie kann ich eine statische Klasse oder ein Singleton-Muster ordnungsgemäß in JavaScript implementieren?. 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