为了使用默认值初始化对象,我使用Underscore的default函数。根据文档,它的工作原理如下:
var foo = _.defaults(object, *defaults)
这被描述为:
使用默认对象中的值填充对象中未定义的属性,并返回对象。一旦填充了属性,进一步的默认值将不起作用。
虽然它基本上运行良好,但我总是会遇到一个问题:操作原始对象的副作用。
如果我运行
var foo = { bar: 'baz' };
然后说
var bar = _.defaults(foo, { dummy: 23 });
不仅如此,bar
还拥有一个名为 dummy
的属性,原始的 foo
对象也被改变了。我的当前解决方法是:
var bar = _.defaults({}, foo, { dummy: 23 });
很遗憾,您很容易忘记这一点。我认为 defaults
函数既更改输入参数,又将结果作为返回值返回,这是相当奇怪的行为。应该只有一种方式。
你如何处理这种情况?有更好的方法来处理吗?