2011-08-14 22 views
10

¿Es posible crear espacio de nombres en un archivo JavaScript insertado dinámicamente?Espacio de nombres contenidos de un archivo javascript cargado dinámicamente

Sé que puedo incluir dinámicamente un archivo JavaScript creando una etiqueta script e insertarla en el DOM, pero ¿puede este archivo incluido ser espacio de nombre? Por lo tanto, si el archivo tiene una función llamada bar, me gustaría acceder a ella a través de un espacio de nombres, por ejemplo foo: es decir, foo.bar().

Respuesta

0

Si quiere agregar un espacio de nombres a todo lo que está definido en ese archivo mientras lo carga dinámicamente, sin modificar el archivo en sí, la respuesta es no.

6

Sí, CommonJS Modules/1.1 especifica solo una forma de hacerlo.

Lo he usado solo con Node.js en el lado del servidor, pero creo que hay otras bibliotecas creadas para trabajar con el navegador que son compatibles con CommonJS. Tenga en cuenta que hay múltiples especificaciones de módulo para el servidor/navegador (aún no profundizó en eso).

Los módulos están escritos igual que cualquier otra pieza de Javascript, la única adición se le exportar lo desea exponer:

module.exports.bar = Bar; 

function Bar() { 
// code 
} 

Y el uso:

var foo = require('mymodule'); 

foo.bar(); 

lo que se hace en el fondo, todo el código está envuelto en otra función y las exportaciones son sus propiedades.

También, Michael Bolin talked about similar problem in his talk about 'with' keyword at JSConf.

+0

+1 para el video educativo; me alegra aprender cosas nuevas :) –

+1

CurlJS, requireJS admite módulos AMD que son similares y funcionan de inmediato en el navegador. Las herramientas como browserify le permiten crear paquetes de Módulos/1.1. – Raynos

+1

Todavía no he podido jugar con esto. Sin embargo, una pregunta, ¿necesita cada archivo js incluido exportar las propiedades para el 'require' para recogerlos? Si ese es el caso, ¿cómo logro el espacio de nombres cuando incluyo un archivo js de terceros? –

Cuestiones relacionadas