Backbone: Collection#get return 是模型的副本还是模型对象本身?

Backbone: Does Collection#get return a copy of the model or the model object itself?

我一直难以理解在 Backbone 中操作模型时到底发生了什么。

1) 在集合上调用#get 到"grab" 模型时,该模型是否与集合的模型相同? (例如,更新模型将更新集合的模型)

2) 如果将模型添加到各种集合中,所有这些集合是否都包含实际模型(或模型的 "copy")?在我看来是 "copy" 因为当我试图销毁一个已添加到各种集合中的模型时,并不是各个集合中的所有模型都被销毁了。

谢谢!感谢任何见解。

与 Javascript 中的所有其他 object 一样,Backbone object 是“passed by a copy of the reference”。最好的思考方式是 javascript 在内存中有一段数据,而变量只不过是指向这些数据位的指针。当你设置一个变量等于另一个变量时,你真正得到的是指针的两个副本,都指向内存中的同一块数据。因此,将其应用于您的问题:

  1. 是的。当你 'get' 模型时,你 'get' 来自 backbone 的是 指向内存中存储 object 的位置的指针。轮到你了 有两个指针(一个在 collection 中,一个在你的变量中),你可以对它们中的任何一个执行操作 并且两者都将对相同的数据执行该操作 内存。
  2. 有点。同样,每个 collection 都有一个指向相同对象的指针 object/model。当您从 collection 中删除该指针时, 其他指针仍然指向同一块内存,并且 记忆没有被抹去,因为它仍然被其他人指向 collection秒。 model.destroy() 将在两者上触发销毁事件 模型和 collection 它持有一个指向它的指针 collection 属性。但是,模型不能保存指针 如果它是多个 collection 的一部分,则为多个 collection。 因此,在您的 destroy 事件中,它仅从上次分配给它的 collection 中删除 - 它在 model.collection 属性中保存的那个。通常,当没有变量保存指向内存中数据块的指针时,该内存将被擦除,但是,在这种情况下,因为您的其他 collection 有指向模型的指针,模型将作为collection 的一部分。