首頁 >web前端 >js教程 >JavaScript 函數表達式的「new」會建立靜態行為嗎?

JavaScript 函數表達式的「new」會建立靜態行為嗎?

Barbara Streisand
Barbara Streisand原創
2024-12-15 08:34:15957瀏覽

Does `new` with JavaScript Function Expressions Create Static Behavior?

帶有'new' 關鍵字的函數表達式:揭開靜態本質

在JavaScript 中,了解帶有'new'的函數表達式的行為關鍵字至關重要。考慮以下程式碼:

var gameData = new function () {
    // Function expressions require no constructor
    this.storageAvailable = function () { ... };
};

需要注意的是,這種情況下的「new」關鍵字並不意味著實例化或允許建立多個實例。相反,它只是執行函數表達式並將生成的匿名物件分配給“gameData”變數。

靜態行為的誤解

靜態行為的概念C# 可能會導致誤解,認為 JavaScript 中的函數表達式也是靜態的。然而,這是不準確的。這裡的'new' 關鍵字不會阻止創建第二個物件:

var gameData2 = new (gameData.constructor)(); // Reinstantiation is possible

此外,函數表達式仍然有一個指向匿名函數的構造函數屬性,可以使用'gameData.constructor 存取它' 。這違背了真正靜態類別的目的。

靜態行為的替代品

如果意圖是創建單個不可實例化的對象,那麼有更合適的使用帶有“new”的函數表達式的替代方案:

  • Object文字: 這些是簡單的JavaScript對象,沒有建構函數或原型,確保了唯一性。
  • 揭示模組模式: IIFE(立即呼叫函數表達式)可用於建立閉包-作用域變量,並傳回具有所需屬性的物件。
  • 單例模式:此設計模式建立類別的單一受控實例,確保對它的所有參考都指向同一個物件。

總之,JavaScript 中帶有「new」關鍵字的函數表達式不表現出靜態行為,因為它們可以多次實例化,並且具有可透過「gameData.constructor」存取的公共構造函數屬性。對於真正的靜態行為,請考慮採用替代方法,例如物件文字、顯示模組模式或單例模式。

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

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