Хорошо:
var Module = (function(Module) {
init = function() {
console.log("init");
};
return Module;
})(Module || {});
Нет, это не сработает. Вы создаете значение по умолчанию для «Модуля» вне этой функции. Вы также забыли var
в объявлении «init», что в этом случае вроде как заставляет его работать, но с ошибками (потому что это глобальная переменная, если не ошибка из-за «строгого» режима, возможно, исполняется). Поскольку вы объявляете «Модуль» с этим оператором, передача «Модуль» в качестве (возможного) аргумента не имеет никакого смысла.
Я не знаю, что для вас значит слово "упрощение"; оригинал выглядит нормально для меня.
изменить & mdash; если вам нужно избавиться от повторяющихся ссылок на базовый объект, вы можете использовать функцию "extension" из библиотеки или из того, что вы пишете сами:
function extend(target) {
var sources = Array.prototype.slice.call(arguments, 1), source;
for (var i = 0; i < sources.length; ++i) {
source = sources[i];
for (var key in source) {
if (source.hasOwnProperty(key))
target[key] = source[key];
}
}
return target;
}
Тогда вы можете сделать что-то вроде этого:
var Module = createModule(); // make an object however you want
Module = extend(Module, {
newProperty_1: "hello world",
newProperty_2: function() {
// this will become a method on "Module"
},
newProperty_3: {
subObjectProperty: "whatever"
}
});