0

MongooseDocumentArraythis.prices. 我可以清除它this.prices = []并保留它的所有方法等,并且仍然是MongooseDocumentArray. 如果我首先将它分配给另一个变量,例如array = this.prices,那么array它也是一个MongooseDocuementArray,并且改变一个会改变另一个(即它们看起来是同一个对象)。但是,如果我随后尝试用 清除该array = []数组,我发现该数组现在是一个普通的空 JS 数组。但是,做array.length = 0的很好。有人可以向我解释为什么会这样以及如何使用原始对象进行操作吗?我猜这更像是 JS 的东西,而不是 Mongoose 的东西,但无论哪种方式我都很困惑。

4

1 回答 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 回答