Пространство имен - динамически загруженное содержимое файла javascript

Возможно ли пространство имен для файла JavaScript, вставленного динамически?

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

Ответ 1

Да, CommonJS Modules/1.1 определяет только один способ сделать это.

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

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

module.exports.bar = Bar;

function Bar() {
 // code
}

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

var foo = require('mymodule');

foo.bar();

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

Кроме того, Майкл Болин рассказал о подобной проблеме в своем разговоре о ключевом слове "с" в JSConf.

Ответ 2

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