在underscore.js中扩展对象的最佳实践

时间:2015-03-08 15:35:12

标签: javascript underscore.js extend relation

我知道扩展对象是通过

完成的
_.extend(parent, child);

方法

我在网上看到过不同的地方,人们在下划线中以特殊方式扩展对象.js

_.extend({}, this, child);

为什么他们这样做?

3 个答案:

答案 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的原始价值,我永远无法取回它。

为了保留myConfigyourConfig,我需要将它们组合成第三个对象:

myConfig = { name: 'bob' }

yourConfig = { name: 'sam' }

sharedConfig = _.extend({}, myConfig, yourConfig);

答案 2 :(得分:2)

下划线的extend方法会覆盖传递给它的第一个参数。但大多数时候你都不想要这样。你只想要另一个对象,其中第二个用第一个方法扩展。

所以你传递一个空对象作为结果的容器对象。

var grandChild = _.extend({}, parent, child);