2017-09-07 33 views
0

当使用模块模式来扩展模块,我们做这样的事情:的Javascript模块模式和空对象

var NewModule = (function (Main) { 

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

})(Main || {}); 

那的伟大工程的问题是,如果主没有声明,我们通过传递一个避免错误空物体Main || {}。我们如何防止这种依赖性被打破?当然,我们一开始不会有任何错误,但如果我们无法将我们的扩展附加到Main,我们会遇到其他类型的错误。

+0

是否希望偶尔不带参数地调用它,并使用扩展方法获取对象? –

+0

可能更好的方法,但我的直接感觉就是,我猜测,或者a)如果你的根依赖项丢失(而不是忽略它并传递一个空对象)或者b)检查其他地方的缺失依赖关系与根兄弟姐妹 –

+0

@RobM。这是正确的,Main'的主要目标是在未来需要时提供所有可用的方法。 –

回答

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.jsb.js, a.js都可以使用。该模式有时也简化为

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

(尽管缺少var声明)。

如果你的模块(尤其是你的newModule)在主模块上确实有依赖关系,并且需要在模块执行前加载它,那么你就不会使用这个默认模式。