Лично я рекомендую расширение # 1 следующим образом:
var Module = (function(Module) {
// A comment
Module.variable1 = 3;
/**
* init()
*/
Module.init = function() {
console.log("init");
};
// ...
return Module;
})(Module || {});
Мне нравится этот шаблон по нескольким причинам. Во-первых, документация (особенно в стиле javadoc) выглядит более естественной, когда все ваши функции являются объявлениями, а не большим хешем. Во-вторых, если ваши подмодули увеличиваются в размере, это позволяет разбить их на несколько файлов без какого-либо рефакторинга.
Например, если Module.Users должен был перейти в свой собственный файл:
var Module = Module || {};
Module.Users = (function(Users) {
/**
* init()
*/
Users.init = function() {
console.log("Module.Users.init");
};
// ...
return Users;
})(Module.Users || {});
Теперь «module.js» и «module.users.js» могут быть отдельными файлами, и они будут работать независимо от порядка загрузки. Также обратите внимание на локальную область видимости имени модуля - это очень удобно, если имя вашего модуля длинное, потому что вы можете взять «MyApp.Users.EditScreen» и ссылаться на него с помощью переменной типа «ES» в рамках определения вашего модуля. .