向JavaScript模块模式添加方法

时间:2013-04-02 23:34:11

标签: javascript module

刚刚了解了JavaScript模块模式。喜欢它!

所以,我创建了我的通用自定义库,它位于我包含在我所有项目中的一个文件中。然后,我想为每个单独的项目添加一些项目特定的方法,并希望将它们放在一个单独的文件中。我不想为这些方法创建一个全新的对象,而是将它们添加到我现有的MODULE对象中。

我该怎么做?感谢

var MODULE = (function () {
    var my = {},
        privateVariable = 1;

    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}());

1 个答案:

答案 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之类的对象)相同,那么传递它,如果它是未定义的或其他假的,则通过一个空的对象。

额外的括号并不是绝对必要的,但它们是一个惯例,表明正在传递函数的结果,而不是函数本身。