Deseo que mi javascript sea más modular dividiéndolo en diferentes archivos y dándole a cada archivo un espacio de nombres 'sub' como ese.JavaScript Namespacing
subA.js
if(typeof ex == "undefined") {
var ex = {};
}
ex.subA = function() {
//all functions of subA here
}
y lo mismo para SubB etc.
Por el momento tengo 1 archivo, ex.js
var ex = (function() {
//private vars/funcs
return {
//public vars/funcs
}
})();
parece que me debería mover la mayoría de mis funciones a subA.js y subB.js pero aún incluir ex.js al inicio, con subA.js y subB.js a hacia adelante
Tengo un número de preguntas.
Me está resultando difícil recordar cómo hice el archivo inicial de espacios de nombres, ex.js. Parece que la función anónima está ahí para hacer que todo sea privado inicialmente, pero no puedo recordar por qué debe estar entre paréntesis y luego ejecutada directamente con el
();
al final.Siguiendo desde q1, ¿deberían mis archivos secundarios estar en el mismo formato que ex.js, es decir, tener la función anon entre paréntesis y ejecutada de inmediato?
Parece que los archivos secundarios solo tendrán acceso a las funciones públicas de
ex
, ¿es así? Si es así, ¿cómo puedo permitir que mis subarchivos accedan a las funciones privadas también?En mi archivo HTML, en mi función document.ready (jQuery), debo ser la inicialización de ex para una variable o puedo llamar a cada función individual yendo
$(document).ready(function() { ex.doSomething(); ex.doSomethingElse(); }
Es Hay una diferencia entre los dos? Creo que cuando se incluye ex.js, se crea inmediatamente una variable global ex (debido a que la función anónima se ejecuta de inmediato), así que no debería necesitar redefinirla en document.ready.
es la primera sentencia if en subA.js diferente de
var ex = ex || {};
¿Qué es mejor?¿Qué estándares de estilo de código js usa?
Si lee todo esto, ya se merece un voto positivo, aplausos.
Será mejor que agregue comillas a su comparación 'typeof', y elimine'! Ex': 'if (typeof ex ==" undefined ")'. –
@Rob W ¿Algunos navegadores no devuelven ex como nulo en lugar de 'indefinido'? El código de espaciado de nombre de yahoo usa! Ex – Michael
Cuando una variable nunca se ha definido antes, 'typeof' devolverá' "undefined" '. Algunas propiedades, sin embargo, pueden devolver 'null' (' typeof null === "object" ') cuando se realiza una comprobación. –