【发布时间】:2017-10-04 14:43:13
【问题描述】:
我一直在用 JavaScript 对象试验不变性的概念。我想知道以下代码示例是否实现了我认为所谓的“结构共享”(请参阅:https://www.youtube.com/watch?v=e-5obm1G_FY&start=1123)。
const objectFirst = {
key1: 1,
key2: 2
}
const updateObject = (lastObject) => {
const updatedObject = {...lastObject, ...{ key2: 4 }} // Object.assign({}, lastObject, { key2: 4 })
return updatedObject
}
const objectNext = updateObject(objectFirst)
objectNext 现在是 { key1: 1, Key2: 4 } 并且 objectFirst 没有改变。但是 key1 是否被复制了?或者,它们现在本质上是对 key1 在两个对象共享的内存中的位置的引用吗?
我基本上只是在问这种方法是否实现了某种“结构共享”?可以看出,如果不是这种情况,就会导致显着的内存膨胀。
【问题讨论】:
-
不,这不是那个。您可以通过更改
objectFirst.key1来验证它是否反映在objectNext中。 -
两个对象都有不同的
key1属性。没有任何可见的财产共享,尽管人们永远不知道内部发生了什么。 -
对于结构共享,您需要一个树状数据结构。最简单的树是一元树,其中每个节点都有一个子节点或没有子节点。你猜对了,我说的是一个单链表。当你实现这样一个列表时,你会注意到前置是一种廉价的操作,而追加是一种昂贵的操作。因此,平衡树用于后者。
标签: javascript javascript-objects immutability