要使用默认值初始化对象,我使用的是 Underscore 的默认函数。根据文档,它的工作原理如下:
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
函数更改输入参数并将结果作为返回值返回是一种非常奇怪的行为。应该是或。
你如何处理这种情况?有没有更好的方法来处理这个问题?