我知道扩展对象是通过
完成的_.extend(parent, child);
方法
我在网上看到过不同的地方,人们在下划线中以特殊方式扩展对象.js
_.extend({}, this, child);
为什么他们这样做?
答案 0 :(得分:22)
根据下划线documentation, _.extend方法的api是
_.extend(destination, *sources)
第一个样本
_.extend(parent, child);
在此示例代码中,您实际上是将属性从子对象扩展到父对象。这里修改了父对象。
第二个样本
_.extend({}, parent, child);
如果您不想修改父对象,并且仍然想要父和子的属性。你可以用这个。在这里,您将父对象和子对象扩展为新对象。
答案 1 :(得分:5)
举个例子:
myConfig = { name: 'bob' }
yourConfig = { name: 'sam' }
_.extend(myConfig, yourConfig);
现在,myConfig
遭到破坏。我已经覆盖了myConfig.name
的原始价值,我永远无法取回它。
为了保留myConfig
和yourConfig
,我需要将它们组合成第三个对象:
myConfig = { name: 'bob' }
yourConfig = { name: 'sam' }
sharedConfig = _.extend({}, myConfig, yourConfig);
答案 2 :(得分:2)
下划线的extend方法会覆盖传递给它的第一个参数。但大多数时候你都不想要这样。你只想要另一个对象,其中第二个用第一个方法扩展。
所以你传递一个空对象作为结果的容器对象。
var grandChild = _.extend({}, parent, child);