Javascript 模块模式和空对象

Javascript module pattern and empty objects

当使用模块模式扩展模块时,我们会这样做:

var NewModule = (function (Main) {

    Main.extension = function () {};
    return Main;

})(Main || {});

效果很好,问题是,如果未声明 Main,我们会通过传递一个空对象来避免错误 Main || {}。我们如何防止这种依赖性被破坏?当然,一开始我们不会有任何错误,但如果我们无法将扩展附加到 Main,我们将遇到其他类型的错误。

如果目标是 扩展 Main,您通常不会分配给 NewModule。你宁愿

// a.js
var Main = (function (localMain) {
    localMain.extensionA = function () {};
    return localMain;
})(Main || {});

我们这样做是为了拥有多个这样的模块:

// b.js
var Main = (function (localMain) {
    localMain.extensionB = function () {};
    return localMain;
})(Main || {});

它们都将 创建或扩展 Main 对象,因此它们加载的顺序无关紧要 - a.js, b.js b.js, a.js 将起作用。该模式有时也简化为

(function (localMain) {
    localMain.extension = function () {};
})(Main = Main || {});

(虽然缺少 var 声明)。

如果您的模块(尤其是您的 newModule)在主模块上确实有一个实际的 依赖关系,并且需要在执行之前加载它,您将不会使用此默认设置模式。