【发布时间】:2012-04-10 16:17:55
【问题描述】:
我正在做一个项目,我们使用一种模式来定义“模块”(即有效的公共静态类),其中每个模块都有一个 init(),一旦定义了模块,就应该调用它。它看起来像:
MyNamespace.MyModule = (function () {
var my = {};
my.init = function(config) {
// setup initial state using config
};
return my;
})();
我在此代码库中看到了两种模式,用于定义 config 默认值并想知道哪一种可能更好——如果有任何我没有立即看到的优点或缺点。推荐?
这是第一个:
MyNamespace.MyModule = (function () {
var my = {},
username,
policyId,
displayRows;
my.init = function(config) {
config = config || {};
username = config.username || 'Anonymous';
policyId = config.policyId || null;
displayRows = config.displayRows || 50;
};
return my;
})();
这是第二个:
MyNamespace.MyModule = (function () {
var my = {},
username = 'Anonymous',
policyId = null,
displayRows = 50;
my.init = function(config) {
config = config || {};
username = config.username || username;
policyId = config.policyId || policyId;
displayRows = config.displayRows || displayRows;
};
return my;
})();
【问题讨论】:
-
第二个示例遵循最佳实践,初始化您的成员,然后如果配置中未提供任何内容,则使用其默认值作为默认值。
-
如果默认参数可以包含复杂对象作为子参数,则第二种变体也更好。
标签: javascript module design-patterns