刚刚了解了JavaScript模块模式。喜欢它!
所以,我创建了我的通用自定义库,它位于我包含在我所有项目中的一个文件中。然后,我想为每个单独的项目添加一些项目特定的方法,并希望将它们放在一个单独的文件中。我不想为这些方法创建一个全新的对象,而是将它们添加到我现有的MODULE对象中。
我该怎么做?感谢
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
答案 0 :(得分:4)
您只需说出Module.namedproperty = ...whatever...
但应该注意的是,如果它位于不同的文件中,则将无法访问模块状态中的任何私有变量。
如果您想为这些新方法提供额外的私有状态,或者想要不先担心运行哪个文件,可以像这样设置模块
var MODULE = (function (my) {
var privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}(MODULE||{}));
如果尚未创建模块,则会创建一个新模块,如果已创建模块,则会添加到新模块。
私有变量仍然是它们自己的特定闭包的私有变量,而不是整个命名空间/模块。
此模块格式接受其闭包功能的输入。如果已经定义了MODULE,它将接收MODULE对象,否则它将创建一个新的空对象。 ||
是逻辑OR,所以MODULE||{}
与“如果定义了MODULE并且是真实的(如MODULE之类的对象)相同,那么传递它,如果它是未定义的或其他假的,则通过一个空的对象。
额外的括号并不是绝对必要的,但它们是一个惯例,表明正在传递函数的结果,而不是函数本身。