2010-11-09 71 views
0

我只是想知道在JavaScript中執行命名空間的「最佳」方式是什麼。我知道這已經被問了一百萬次,但我見過很多方法,包括簡單地聲明一個對象作爲包含其相關變量和方法的命名空間。這是首選的方式還是更使用的樣機結構爲:如果您在javascript中聲明命名空間時使用原型

function Namespace() { 

} 

Namespace.prototype.newMethod = function() { 

}; 

//... 

// now to use this: 
var namespace = new Namespace(); 
namespace.newMethod(); 

我也想知道爲什麼優於一個方法的另一個。

+0

之後,你如何建議你訪問命名空間的成員?創建名稱空間的實例?通過'Namespace.prototype'訪問? – strager 2010-11-09 21:31:45

+0

是的,創建對象的一個​​實例 – bba 2010-11-09 21:32:18

+0

你真的希望用戶創建你的整個*命名空間的*實例*嗎?命名空間通常是全局/單例。 – strager 2010-11-09 21:33:46

回答

1

當您要創建Namespace「class」的實例時,通常只使用原型方法。如果這些方法的目的是靜態的(由其他OO語言定義),那麼簡單地創建一個對象並在其上添加功能是一種方法。

換句話說,您的代碼將無法撥打Namespace.newMethod()。但你可能(new Namespace()).newMethod()。每種方法都是爲了解決不同的問題。

+0

這就是我正在做的。您介意闡述哪種類型的問題適合哪種方法?謝謝 – bba 2010-11-09 21:35:14

+0

我在思考典型的靜態類型的面嚮對象語言如Java的世界之外有一段艱難的時間。我需要具有傳統類類功能的「命名空間」(所以我想原型鏈是最好的)。但我也會偶爾需要靜態方法(就像在Java中一樣)。 – bba 2010-11-09 21:40:43

+0

您可以輕鬆地將兩者結合起來。如果您有一個函數用作類,請使用.prototype.methodName聲明實例方法,使用.methodName聲明靜態方法。 – cdhowie 2010-11-09 21:42:52