В качестве варианта ответа Доменика вы можете использовать магический модуль «экспорта» для автоматического создания ссылки для модуля - «Свойства, добавленные к объекту экспорта, будут находиться в открытом интерфейсе модуль, нет необходимости возвращать любое значение. " Это исключает необходимость вызова функции getTheFoo()
для получения ссылки.
// In foo.js
define(['exports'], function (foo) {
foo.thereCanBeOnlyOne = true;
});
// In bar.js
define(["exports", "./foo"], function (bar, foo) {
bar.setBarOnFoo = function () { foo.bar = "hello"; };
});
// in baz.js
define(["exports", "./foo"], function (baz, foo) {
baz.setBazOnFoo = function () { foo.baz = "goodbye"; };
});
// In any other file
define(["./foo", "./bar", "./baz"], function (foo, bar, baz) {
bar.setBarOnFoo();
baz.setBazOnFoo();
assert(foo.bar === "hello");
assert(foo.baz === "goodbye");
assert(foo.thereCanBeOnlyeOne);
});
Чтобы ответить на комментарий ниже, я лично нашел вышеупомянутое соглашение полезным. Ваш пробег может варьироваться, но не стесняйтесь принять соглашение, если вы считаете, что это полезно Соглашение сводится к этим двум правилам:
- Объявите 'export' как первую зависимость в массиве определения.
- Назовите параметр в функции после файла JavaScript.
Используя имя файла, например, для foo.js имя переменной «foo» увеличивает читабельность кода, поскольку большинство разработчиков определяют «foo» в качестве параметра зависимости foo.js. При сканировании кода или использовании grep легко найти все ссылки на использование 'foo' как внутри, так и снаружи модуля, и это позволяет легко определить, что модуль представляет для публики. Например, переименование bar.setBarOnFoo
в bar.setFooBar
намного проще, если объявление в модуле bar.js отражает использование в других файлах. Простой поиск и замена bar.setBarOnFoo на bar.setFooBar по всем файлам выполнит задачу.