我已經開始在我的一個項目中使用模塊模式。據我所知,它是這樣的:使用JavaScript模塊模式時應該在哪裏放置私有方法?
var obj = (function(foo){
//Some initialization logic up here.
//Private methods
var privateBazz = function(){
return "I'm known only to this closure!";
}();
//Public methods
return {
publicFoo: foo,
publicBar: function(){
return foo + privateBazz;
}
}
})();
這看起來在紙面上相當不錯的,在實踐中,似乎工作得相當好。頂部的初始化邏輯非常直觀,然後是私有方法,然後是公共的。
雖然我遇到過一個問題。我應該如何從return語句的範圍之外和obj的函數聲明的範圍內調用publicFoo或publicBar?
我目前的解決辦法是做這樣的事情:
var obj = (function(foo){
//Private methods declared early for use.
var privateBazz = function(){
return "I'm known only to this closure!";
}();
var privateBar = function(){
return foo + privateBazz;
};
//Some initialization logic up here.
var dependentOnBar = privateBar();
//Public methods
return {
publicFoo: foo,
publicBar: privateBar
}
})();
這工作,但突然我的私有變量的聲明都放在我的上述對象的私有財產申報。如果我試圖保持私有函數聲明與第一次調用它們的代碼接近,那麼問題會變得更加嚴重,所以我剛剛在頂部聲明瞭所有我需要的私有函數,然後再初始化屬性。再說一遍,這是有效的,但我習慣於讓代碼儘可能接近執行點。所以,在頂層聲明私有函數塊對我來說真的很尷尬。有沒有其他人有這種感覺,或者這只是我需要克服JavaScript的東西?當我看到這種情況發生時,我應該採取哪些措施?
這就是它的工作原理。這並不罕見。只需用'var'聲明所有內容,並只返回公共變量。 – elclanrs 2012-07-31 04:00:52
您可能已經知道它了,但爲了以防萬一,在這裏您可以獲得有關javascript設計模式的很好的資源http://addyosmani.com/resources/essentialjsdesignpatterns/book/ 它解釋了模塊模式和派生類等等。 – davids 2012-07-31 06:56:24