2010-11-10 2 views
8

Для моего веб-приложения, я создаю пространство имен в 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

+0

Возможный дубликат [Декларация пространства имен JavaScript] (http://stackoverflow.com/questions/2504568/javascript-namespace-declaration) – casablanca

+0

@casablanca, нет - мой вопрос не является дубликатом того, с чем вы связаны. – StaceyI

ответ

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 –

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 действительно не имеет частных переменных, и я думаю, что это несколько клад, который нарушает другие вещи. Просто попробуйте наследовать от этого класса, например.