でMongooseDocumentArray見つけましたthis.prices。私はそれをクリアすることができthis.prices = []、それはそのメソッドなどをすべて保持し、MongooseDocumentArray. 最初に別の変数に割り当てると、たとえばarray = this.prices、arrayもMongooseDocuementArrayになり、一方を変更すると他方が変更されます (つまり、同じオブジェクトのように見えます)。ただし、それを でクリアしようとするとarray = []、配列がプレーンな空の JS 配列になっていることがわかります。array.length = 0ただし、うまく動作します。誰かがこれがなぜなのか、また元のオブジェクトでどのように機能するのかを説明できますか? これは特にMongooseのものというよりはJSのものだと思いますが、どちらにしても当惑しています。
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 に答える