でMongooseDocumentArray
見つけましたthis.prices
。私はそれをクリアすることができthis.prices = []
、それはそのメソッドなどをすべて保持し、MongooseDocumentArray
. 最初に別の変数に割り当てると、たとえばarray = this.prices
、array
もMongooseDocuementArray
になり、一方を変更すると他方が変更されます (つまり、同じオブジェクトのように見えます)。ただし、それを でクリアしようとするとarray = []
、配列がプレーンな空の JS 配列になっていることがわかります。array.length = 0
ただし、うまく動作します。誰かがこれがなぜなのか、また元のオブジェクトでどのように機能するのかを説明できますか? これは特にMongooseのものというよりはJSのものだと思いますが、どちらにしても当惑しています。
質問する
174 次
1 に答える
1
あなたが最初に言うとき:
this.prices = [];
...次に、マングースは「セッター」と呼ばれるものを使用して、割り当てをインターセプトし、にキャストしMongooseDocumentArray
ます。バックグラウンドで、マングースは、ドキュメント配列だけでなく、ドキュメント上のすべてのパス設定に対してこれを行います。これを実現するために使用Object.defineProperty
します。それとその機能の詳細については、こちらをご覧ください。
その後に起こることはより単純です。それを別の変数に代入すると、次のようになります。
array = this.prices;
...次に、キャストthis.prices
オブジェクトへの参照を に割り当てますarray
。
しかし、あなたが言うとき:
array = [];
...次に、その参照を変更して、新しいオブジェクトarray
を指すようにします。Array
array.length = 0
一方、 を変更しDocumentArray
ますが、参照はそのまま残します。
source、特にdocument.jsとさまざまなを掘り下げると、types
マングースがこれをどのように処理するかを理解し始めることができます。
于 2013-08-12T03:23:05.840 に答える