为了在处理 JavaScript 对象时继承一个对象的属性,我经常看到_.clone
的用法,其目的是创建一个具有另一个对象属性的对象,然后对其进行扩展。
为什么我们不能只使用_.extend
更相关的对象来扩展对象?
请告诉我两者之间的区别,以及为什么我们不能_.extend
而不是_.clone
这是一项昂贵的操作。
_.extend
改变对象。_.clone
按值而不是按引用创建副本,并且不会更改原始对象。请注意,_.extend
只是_.assignIn
的别名。
_.assignIn(object, [sources])
注意:此方法会改变
object
。https://lodash.com/docs/4.17.2#assignIn
另请参阅_.clone
文档:
https://lodash.com/docs/4.17.2#clone
如果_.extend()
现有对象,则会更改该对象。如果先_.clone()
它,则原始对象保持不变。
当然,您可以使用原始对象的属性和一些附加属性扩展空对象,这也会使原始对象保持不变:
_.extend({}, originalObject, {
additionalProperty: "foo"
})
这与originalObject
的浅层克隆非常相似。使用 ES2015,您可以使用普通的 JavaScript 和Object.assign()
来实现相同的目标。
延伸阅读:
- 为什么不变性在 JavaScript 中很重要?