【发布时间】:2016-03-14 21:51:55
【问题描述】:
我正在浏览 Immutable.js 的源代码,其中有一个我不明白的 ownerID 字段。
这是Map.asMutable() 和Map.asImmutable() 的来源:https://github.com/facebook/immutable-js/blob/master/src/Map.js#L171
似乎可变对象和不可变对象之间的唯一区别是它们的ownerIDs。什么是ownerID,它的用途是什么?
【问题讨论】:
-
没有一个答案给出明确的解释,这是我目前的理解:
ownerID基本上是isMutable。但是,无论出于何种原因,它们都需要一种比较可变对象的方法,因此它们需要每个对象的唯一标识符。isMutable表示它是一个布尔值,因此他们将其命名为ownerID。它可以重命名为mutableObjectID。 -
如果您查看下面我的答案的最后一部分,您会看到他们的代码正在做什么(我认为)是通过检查
ownerID是否已更改来检查对象是否已发生变异.如果它发生了变异,它们会返回一个新对象。如果它没有发生变异或ownerId不存在,它们只会返回当前对象,因为没有理由创建一个新对象。 -
这不是
__altered的用途吗?似乎他们也必须将对象与其他对象进行比较。我不知道为什么。