2011-03-01 21 views
38

Digamos que tengo un espacio de nombres de esa manera:División de un espacio de nombres Javascript en varios archivos

var myNamespace = { 
    foo: function() { 
    }, 
    bar: function() { 
    } 
}; 

¿Cuál es la mejor manera de dividir el código en archivos que definen foo y bar por separado?

No me preocupa el tiempo de carga. Lo volveré a concatenar en un archivo antes de la implementación.

+4

¡Vote por una excelente pregunta! Me enseñó algo bueno. –

+0

También mencionado en: http://stackoverflow.com/a/4130511/895245 –

Respuesta

42

Al comienzo de cada archivo:

if(myNameSpace === undefined) { 
    var myNameSpace = {}; 
} 

Archivo 1:

myNamespace.foo = function()... 

Archivo 2:

myNamespace.bar = function()... 
2

simple definir en archivos separados de esta manera:

Archivo 1:

var myNamspace = {}; 

Archivo 2:

myNamespace.foo = function()... 

Archivo 3:

myNamespace.boo = function()... 

Sólo asegúrese de que cargue los archivos en el orden correcto.

13
// File1: 
// top level namespace here: 
var myNamespace = myNamespace || {}; 

// File2: 
myNamespace.foo = function() { 
    // some code here... 
} 
1
(function (NS) { 
    NS.Uber = function Uber() { 
     this.super = new NS.Super(); // yes, it works! 
    }; // 
}(NS = NS || {})); 

// ------------- other file ----------------- 

(function (NS) { 
    NS.Super = function Super() { 
     this.uber = new NS.Uber(); // yes, it will also work! 
    }; // 
}(NS = NS || {})); 

// -------------- application code ------------ 

var uber = new NS.Uber(); 
console.log(uber.super); 

var super = new NS.Super(); 
console.log(super.uber); 
+0

NS = NS || {} significa que envía NS como argumento, y si no existe, asigna un objeto vacío a NS. – eavichay

+0

Esto desencadena un error de referencia: NS no está definido al intentar ejecutar la línea '} (NS = NS || {}));' [ver este jsfiddle por ejemplo] (http://jsfiddle.net/6cyrx3ad/) – Eregrith

8

En cada archivo siga este patrón:

(function(nameSpace) { 
    nameSpace.foo = function() { ... }; 
})(window.nameSpace = window.nameSpace || {}); 

Este orden de carga de manera no es importante.

Cuestiones relacionadas