Javascript对象分配和结构共享
我一直在试验javascript对象的不变性概念。我想知道下面的代码示例是否实现了我所认为的“结构共享”(请参阅:) objectNext现在是{key1:1,Key2:4},objectFirst保持不变。但是key1被复制了吗?或者,它们现在本质上是两个对象共享的对key1在内存中位置的引用吗Javascript对象分配和结构共享,javascript,javascript-objects,immutability,Javascript,Javascript Objects,Immutability,我一直在试验javascript对象的不变性概念。我想知道下面的代码示例是否实现了我所认为的“结构共享”(请参阅:) objectNext现在是{key1:1,Key2:4},objectFirst保持不变。但是key1被复制了吗?或者,它们现在本质上是两个对象共享的对key1在内存中位置的引用吗 我基本上只是问这种方法是否实现了某种“结构共享”?我们可以看到,如果不是这样,那么它将导致严重的内存膨胀。不,这不是事实。您可以通过更改objectFirst.key1来验证这一点,并查看它是否反映在
我基本上只是问这种方法是否实现了某种“结构共享”?我们可以看到,如果不是这样,那么它将导致严重的内存膨胀。不,这不是事实。您可以通过更改
objectFirst.key1
来验证这一点,并查看它是否反映在objectNext
中。这两个对象都具有不同的key1
属性。虽然人们永远不知道内部发生了什么,但不存在任何可见的属性共享。对于结构共享,您需要一个树状的数据结构。最简单的树是一元树,其中每个节点都有一个子节点或没有子节点。你猜对了,我说的是一个单链表。当您实现这样一个列表时,您会注意到预结束是一个廉价的操作,而追加是一个昂贵的操作。因此,平衡树用于后者。不,这不是那个。您可以通过更改objectFirst.key1
来验证这一点,并查看它是否反映在objectNext
中。这两个对象都具有不同的key1
属性。虽然人们永远不知道内部发生了什么,但不存在任何可见的属性共享。对于结构共享,您需要一个树状的数据结构。最简单的树是一元树,其中每个节点都有一个子节点或没有子节点。你猜对了,我说的是一个单链表。当您实现这样一个列表时,您会注意到预结束是一个廉价的操作,而追加是一个昂贵的操作。因此,后者采用平衡树。
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)