2010-11-10 6 views
8

Per la mia applicazione web, sto creando uno spazio dei nomi in JavaScript in questo modo:Come creare variabili private all'interno di un namespace?

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

voglio anche di creare "privato" (so che questo non esiste in JS) variabili namespace, ma non sono sicuro che cosa è il miglior modello di design da utilizzare.

sarebbe:

com.example._var1 = null; 

o se il modello di progettazione essere qualcos'altro?

+2

Per "grande" intendi "creare"? – kennytm

+0

possibile duplicato di [JavaScript Namespace Declaration] (http://stackoverflow.com/questions/2504568/javascript-namespace-declaration) – casablanca

+0

@casablanca, no - la mia domanda non è un duplicato di ciò che hai collegato anche tu. – StaceyI

risposta

8

chiusure sono spesso usati in questo modo per simulare variabili private:

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

Per aggiungere a questa risposta: questo articolo descrive alcune diverse varianti del modello di modulo che dovresti prendere in considerazione. http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth –

7

Douglas Crockford reso popolare cosiddetto Module Pattern dove è possibile creare oggetti con le variabili "privati":

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 

Ma come hai detto Javascript non ha veramente variabili private e penso che questo sia in qualche modo un clandestino, che rompa altre cose. Prova ad ereditare da quella classe, per esempio.

Problemi correlati