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)在主模块上确实有一个实际的 依赖关系,并且需要在执行之前加载它,您将不会使用此默认设置模式。
当使用模块模式扩展模块时,我们会这样做:
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)在主模块上确实有一个实际的 依赖关系,并且需要在执行之前加载它,您将不会使用此默认设置模式。