_.extend vs _.clone in lodash



为了在处理 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 中很重要?

最新更新