Javascript não oferece suporte nativo a namespaces e requer soluções alternativas.
Quando criamos uma biblioteca JavaScript, o namespace desempenha um papel importante. Podemos encapsular os arquivos JavaScript dispersos (*.js) que compõem a biblioteca JavaScript no namespace sem definir funções ou classes globais. Por exemplo, Person, que aparece muitas vezes neste capítulo, pode ser encapsulado em um namespace adequado como parte da biblioteca:
Código 5-13:
Copie o código do código da seguinte forma:
var com = {};
com.anyjava = {};
com.anyjava.Person = function(nome) {
//Membros privados
var_nome = nome;
//Acessador
this.getNome = função() {
retornar _nome;
};
this.setName = function(nome) {
_nome = nome;
};
};
//protótipo
com.anyjava.Person.prototype = {
comer:função() {
alert(this.getName() + "está comendo alguma coisa.");
},
dormir:função() {
alert(this.getName() + "está dormindo.");
},
caminhar:função() {
alert(this.getName() + "está andando.");
}
};
var dirk = new com.anyjava.Person("Dirk");
dirk.comer();
A partir do Código 5-13, obtemos um namespace que está mais alinhado com os hábitos dos desenvolvedores Java e, ao instanciar o objeto Person, também devemos especificar o caminho do nosso espaço de comando.
Aqui vai uma pequena dica: se você estiver usando uma biblioteca JavaScript desenvolvida por terceiros e com um planejamento de namespace relativamente completo, você pode se cansar de escrever namespaces longos todas as vezes. Por exemplo, se você estiver usando a biblioteca JavaScript que desenvolvi, no namespace com.anyjava.control.ui, há muitos controles de UI estendidos que você deseja usar. muitas vezes.anyjava.control.ui.XXX(). Ao especificar aliases de namespace, podemos escrever código menos repetitivo, como mostrado no Código 5-14, outro método de instanciar Person no Código 5-13:
Código 5-14:
Copie o código do código da seguinte forma:
var ns = com.anyjava;
var dirk = new ns.Person("Dirk");
dirk.comer();
A última coisa que explicarei é um problema ao qual precisamos prestar atenção ao usar namespaces. Ao escrever uma biblioteca JavaScript, na maioria dos casos, as instruções de declaração de namespace podem aparecer em vários locais em um arquivo JavaScript ao mesmo tempo ou em vários arquivos JavaScript. No entanto, um recurso da linguagem JavaScript é que a última variável declarada substituirá a variável declarada anteriormente. Variáveis com o mesmo nome exigem que prestemos atenção à questão das declarações repetidas. Ou seja, toda vez que declaramos um objeto namespace, é recomendável primeiro determinar se o objeto namespace já existe, conforme mostrado no Código 5-. 15:
Código 5-15:
Copie o código do código da seguinte forma:
if (typeof com.anyjava == "indefinido") var com.anyjava = {};
Desta forma podemos garantir que o objeto “com.anyjava” seja declarado apenas uma vez.