我MongooseDocumentArray
在this.prices
. 我可以清除它this.prices = []
并保留它的所有方法等,并且仍然是MongooseDocumentArray
. 如果我首先将它分配给另一个变量,例如array = this.prices
,那么array
它也是一个MongooseDocuementArray
,并且改变一个会改变另一个(即它们看起来是同一个对象)。但是,如果我随后尝试用 清除该array = []
数组,我发现该数组现在是一个普通的空 JS 数组。但是,做array.length = 0
的很好。有人可以向我解释为什么会这样以及如何使用原始对象进行操作吗?我猜这更像是 JS 的东西,而不是 Mongoose 的东西,但无论哪种方式我都很困惑。
问问题
174 次
1 回答
1
当你第一次说:
this.prices = [];
...然后猫鼬正在使用所谓的“setter”来拦截分配并将其转换为MongooseDocumentArray
. 在幕后 mongoose 为文档上的所有路径设置执行此操作,而不仅仅是文档数组。它Object.defineProperty
用来实现这一点。在此处阅读更多关于它及其功能的信息。
之后发生的事情就更简单了。然后,当您将其分配给另一个变量时:
array = this.prices;
this.prices
...然后您将对演员对象的引用分配给array
.
但是当你说:
array = [];
...然后您正在更改该引用,导致array
指向一个新Array
对象。
array.length = 0
另一方面修改DocumentArray
,但保持引用不变。
如果你在源代码中挖掘,特别是document.js和各种types
,你可以开始弄清楚 mongoose 是如何处理这个的。
于 2013-08-12T03:23:05.840 回答