¿Cómo crear variables privadas dentro de un espacio de nombres?

Para mi aplicación web, estoy creando un espacio de nombres en JavaScript de esta manera:

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

También quiero crear variables de espacio de nombres "privadas" (sé que esto no existe en JS) pero no estoy seguro de cuál es el mejor patrón de layout para usar.

Podría ser:

 com.example._var1 = null; 

¿O el patrón de layout sería otra cosa?

Los cierres se usan con frecuencia de este modo para simular variables privadas:

 var com = { example: (function() { var that = {}; // This variable will be captunetworking 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; })() }; 

Douglas Crockford popularizó el llamado Patrón de Módulo donde puede crear objects con variables "privadas":

 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 

Pero como dijiste, Javascript no tiene realmente variables privadas y creo que esto es un poco asqueroso, que rompe otras cosas. Solo trata de henetworkingar de esa class, por ejemplo.