今日の質問でディープ クローン オブジェクトを見つけて、プロトタイプ チェーンでプログラムするように求められました
そこで、気まぐれにこの知識ポイントを復習することにしました
クローン オブジェクト、この用語は派手に思えるかもしれませんが、実はこれは何もない、ただのコピーです 全く同じに見えるオブジェクトです
初心者の中にはそう簡単ではないかと思う人もいるかもしれません
これは複製されたオブジェクトではありません、obj1 と obj2 は基本的に同じです。両方とも同じメモリを指します。アドレス空間
は、同じ小さな家を手に入れたようなものです
これは、オブジェクトが参照値 (ヒープ データ) であるためです
参照値と言えば、
JavaScript での参照値は次のとおりです。オブジェクト
ここで、配列は特別なオブジェクトであり、関数も特別な実行可能オブジェクトであることに注意してください。これをコピーする必要があり、対応する浅いクローン オブジェクトについては、参照値を取得するだけです。理解していなくても問題ありません。コードを読めばわかります。まず、浅いクローン オブジェクトを見てみましょう。どうやって CET-6 に合格したのか本当にわかりません)
for-in についてはパフォーマンスに小さな問題があります。興味のある方はチェックしてみてください。他の記事を参照してください。
ポータル o( ̄▽ ̄)d
このコードは非常に簡単です。 , これ以上は説明しません
Chrome コンソールを見てみましょう
次に、今すぐ 1 つのことを行います
新しい家に人を追加します
これは「新しい家」は新しいものではないので、変数名に混同しないでください
ディープクローンオブジェクト
この場合、どうすればよいですか
欲しいので新しいオブジェクトを取得するには、新しいオブジェクトを作成し、古いオブジェクトの内容を新しいオブジェクトにコピーします
オブジェクト内にオブジェクトがあるかどうかは別の質問になります
しかし、ループには2種類あります
反復
再帰
再帰の方が優れているのは間違いありません
var obj1 = {name: 'payen'};var obj2 = obj1;
今回は実際に新しい家です
原理は同じです
var house = { name: 'payen', people: { father: true, mother: true } }function easyClone(obj){ var newObj = {}; for(var prop in obj){ if(obj.hasOwnProperty(prop)){ newObj[prop] = obj[prop]; } } return newObj; }var newHouse = easyClone(house);