2010-11-10 60 views
8

對於我的web應用程序,我在JavaScript創建命名空間,如下所示:如何在命名空間內創建私有變量?

var com = {example: {}}; 
com.example.func1 = function(args) { ... } 
com.example.func2 = function(args) { ... } 
com.example.func3 = function(args) { ... } 

我也想創建「私人」(我知道這並不在JS存在)命名空間變量,但我不知道是什麼最好的設計模式使用。

難道是:

com.example._var1 = null; 

或者將設計模式是別的東西?

+2

「偉大」你的意思是「創造」? – kennytm 2010-11-10 20:22:40

+0

[JavaScript命名空間聲明]的可能重複(http://stackoverflow.com/questions/2504568/javascript-namespace-declaration) – casablanca 2010-11-10 20:27:55

+0

@casablanca,不 - 我的問題不是你鏈接的重複。 – StaceyI 2010-11-10 20:30:01

回答

8

瓶蓋經常使用這樣的模擬私有變量:

var com = { 
    example: (function() { 
     var that = {}; 

     // This variable will be captured in the closure and 
     // inaccessible from outside, but will be accessible 
     // from all closures defined in this one. 
     var privateVar1; 

     that.func1 = function(args) { ... }; 
     that.func2 = function(args) { ... } ; 

     return that; 
    })() 
}; 
+2

添加到答案:本文介紹模塊模式的幾種不同變體你應該考慮。 http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth – 2010-11-10 20:35:06

7

道格拉斯·克羅克福德推廣所謂的Module Pattern在那裏你可以創建一個「私人」變量的對象:

myModule = function() { 

     //"private" variable: 
     var myPrivateVar = "I can be accessed only from within myModule." 

     return { 
       myPublicProperty: "I'm accessible as myModule.myPublicProperty" 
       } 
     }; 

}(); // the parens here cause the anonymous function to execute and return 

但正如你所說Javascript並沒有真正的私有變量,我認爲這有點混亂,這打破了其他的東西。例如,嘗試從該類繼承。

相關問題