【发布时间】:2012-03-25 00:54:58
【问题描述】:
// opt_options is optional
function foo(a, b, opt_options) {
// opt_c, opt_d, and opt_e are read from 'opt_options', only c and d have defaults
var opt_c = 'default_for_c';
var opt_d = 'default_for_d';
var opt_e; // e has no default
if (opt_options) {
opt_c = opt_options.c || opt_c;
opt_d = opt_options.d || opt_d;
opt_e = opt_options.e;
}
}
上面的内容看起来非常冗长。使用默认参数处理参数选项的更好方法是什么?
【问题讨论】:
-
jQuery 和 underscore 都带有一个可以很好地处理这个问题的 extend 方法。
-
@blockhead - 所以,使用
extend并且不要为选项保留局部变量? -
实际上,一段时间后我得出结论,当涉及到 Javascript 命名参数时,冗长是一件好事。在函数开始时将每个参数复制到变量是记录预期选项的好方法,并且还可以让您修改它们而不会与原始对象搞砸。
-
@missingno - 我倾向于同意,但我不喜欢每个变量出现两次。在下面查看我的解决方案。
标签: javascript design-patterns option optional-parameters