首頁 >web前端 >js教程 >有「new」的 JavaScript 函數表達式真的是靜態的嗎?

有「new」的 JavaScript 函數表達式真的是靜態的嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-20 12:55:19483瀏覽

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

使用 'new' 關鍵字的 Javascript 函數表達式是否真正靜態?

嘗試在Javascript 中建立一個類似靜態的類,而無需使用建構子或實例化,程式碼編寫如下:

var gameData = new function () {
    //May need this later 
    this.init = function () { };

    this.storageAvailable = function () {
        if (typeof (Storage) !== "undefined") {
            return true;
        }
        else {
            return false;
        }
    };
}

假設是「new」關鍵字阻止實例化並使函數表達式的行為類似於靜態類別。然而,這並不完全準確。

理解 Javascript 中的「靜態」概念

在 Javascript 中,靜態屬性或方法不會綁定到 a 的實例班級。它屬於類別本身,無論是否存在任何實例。靜態成員通常由類別的所有實例共用。

函數表達式方法的限制

儘管有 'new' 關鍵字,函數表達式仍有一個建構函式財產。這意味著可以使用以下程式碼還原它:

var gameData2 = new (gameData.constructor)();

這將建立函數表達式的單獨實例,從而否定預期的靜態行為。此外,原型鏈包含函數表達式的無用原型物件。

Javascript 中「靜態」實作的替代方案

要實現真正的靜態行為,請考慮這些替代方案:

  • 物件字面量: 使用簡單的物件字面量來定義沒有建構子的屬性和方法。
  • 揭示模組模式:將物件文字包含在 IIFE(立即呼叫函數表達式)中以建立閉包範圍的變數。
  • Constructor 'Class': 定義一個建構函數,該函數傳回相同的單例物件實例化。

以上是有「new」的 JavaScript 函數表達式真的是靜態的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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