0

刚刚学习了 JavaScript 模块模式。爱它!

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

我该怎么做呢?谢谢

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

    function privateMethod() {
        // ...
    }

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

    return my;
}());
4

1 回答 1

5

你可以通过说来添加一个属性或函数Module.namedproperty = ...whatever...

但应该注意的是,如果这是在不同的文件中,它将无法访问模块状态中的任何私有变量

如果您想为这些新方法提供额外的私有状态,或者不想担心首先运行哪个文件,您可以像这样设置您的模块

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

    function privateMethod() {
        // ...
    }

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

    return my;
}(MODULE||{}));

如果尚未创建模块,它将创建一个新模块,如果有,则添加到现有模块。

私有变量仍然是它们自己的特定闭包私有的,而不是整个命名空间/模块的私有变量。

更新解释

此模块格式将输入输入到其闭包函数中。如果 MODULE 已经定义,则接收 MODULE 对象,否则创建一个新的空对象。 ||是逻辑或,因此MODULE||{}与“如果 MODULE 已定义且为真(像 MODULE 这样的对象将是),则传递它,如果它未定义或以其他方式为假,则传递一个空对象。

额外的括号不是绝对必要的,但它们是一种约定,以明确传递函数的结果,而不是函数本身。

于 2013-04-02T23:51:04.413 回答