首頁 >web前端 >js教程 >如何在 JavaScript 中正確實作靜態類別或單例模式?

如何在 JavaScript 中正確實作靜態類別或單例模式?

Susan Sarandon
Susan Sarandon原創
2024-12-19 18:45:14989瀏覽

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

理解Javascript 靜態函數表達式:GameData 案例

在Javascript 中,使用new 關鍵字的函數表達式在相同關鍵字意義上不是靜態的作為他們的C# 對應。這種方法不是創建真正的靜態類,而是洩漏建構函數屬性並產生可能不符合預期的原型物件。

深入了解 GameData 範例

提供的範例 gameData 示範了使用具有 new 關鍵字的函數表達式建立「類別」的單一實例。但是,包含建構函數屬性允許實例化其他對象,從而使“類別”非靜態。

替代單例方法

實作真正的Javascript 中的單例模式,請考慮以下方法:

  • Object文字: 建立一個缺少建構子和原型的簡單物件文字。
  • 揭示模組模式: 使用立即呼叫函數表達式 (IIFE) 建立閉包範圍變數並傳回所需的物件。
  • 建構子(「類別」):定義一個建構函數,在呼叫時總是傳回相同的單例物件。

單例模式實作

下面的程式碼使用建構函式說明了單例模式:

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

此方法可確保後續實例化嘗試總是傳回相同的GameData 實例,從而建立真正的單例行為。

以上是如何在 JavaScript 中正確實作靜態類別或單例模式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn