帶有'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”的函數表達式的替代方案:
總之,JavaScript 中帶有「new」關鍵字的函數表達式不表現出靜態行為,因為它們可以多次實例化,並且具有可透過「gameData.constructor」存取的公共構造函數屬性。對於真正的靜態行為,請考慮採用替代方法,例如物件文字、顯示模組模式或單例模式。
以上是JavaScript 函數表達式的「new」會建立靜態行為嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!