2011-08-14 3 views
10

Возможно ли, что пространство имен будет вставлено динамически?Пространство имен динамически загружаемого содержимого файла javascript

Я знаю, что я могу динамически включать файл JavaScript, создав тег script и вставляя его в DOM, но может ли этот файл включать имена? Итак, если файл имеет функцию под названием bar, я бы хотел получить доступ к нему через пространство имен, скажем foo: i.e. foo.bar().

ответ

0

Если вы хотите добавить пространство имен ко всему, что определено в этом файле, загружая его динамически, не изменяя сам файл, ответ отрицательный.

6

Да, CommonJS Modules/1.1 указывает только один способ его выполнения.

Я использовал его только с Node.js на стороне сервера, но я считаю, что существуют другие библиотеки, созданные для работы с браузером, совместимым с CommonJS. Остерегайтесь того, что для сервера/браузера есть несколько спецификаций модулей (пока не вникал в это).

модули написаны точно так же как и любой другой кусок JavaScript, единственное добавление экспорта, что вы хотите выставить:

module.exports.bar = Bar; 

function Bar() { 
// code 
} 

И использование:

var foo = require('mymodule'); 

foo.bar(); 

Что на самом деле сделано в фон, весь код завернут в другую функцию, а экспорт - его свойствами.

Также Michael Bolin talked about similar problem in his talk about 'with' keyword at JSConf.

+0

+1 для образовательного видео; рады узнать новые вещи :) –

+1

CurlJS, requireJS поддерживают модули AMD, которые похожи и работают из коробки в браузере. Такие инструменты, как браузер, позволяют создавать пакеты модулей/1.1. – Raynos

+1

Я до сих пор не играю с этим. Один вопрос, однако, содержит ли каждый файл js для экспорта свойств для 'require', чтобы забрать их? Если это так, как мне достичь пространства имен при включении стороннего js-файла? –