Javascript模块模式和空对象

时间:2017-09-07 17:04:14

标签: javascript module module-pattern

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

var NewModule = (function (Main) {

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

})(Main || {});

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

1 个答案:

答案 0 :(得分:1)

如果目标是扩展 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和{{ 1}}会起作用。该模式有时也简化为

b.js, a.js

(虽然缺少(function (localMain) { localMain.extension = function () {}; })(Main = Main || {}); 声明)。

如果你的模块(特别是你的newModule)在主模块上确实有一个实际的依赖,并且要求它在执行之前加载,你就不会使用这个默认模式。