JavaScript ディープ クローン オブジェクト

黄舟
リリース: 2017-02-28 14:24:59
オリジナル
1284 人が閲覧しました

今日の質問でディープ クローン オブジェクトを見つけて、プロトタイプ チェーンでプログラムするように求められました

そこで、気まぐれにこの知識ポイントを復習することにしました


クローン オブジェクト、この用語は派手に思えるかもしれませんが、実はこれは何もない、ただのコピーです 全く同じに見えるオブジェクトです
初心者の中にはそう簡単ではないかと思う人もいるかもしれません

そうです

これは複製されたオブジェクトではありません、obj1 と obj2 は基本的に同じです。両方とも同じメモリを指します。アドレス空間
は、同じ小さな家を手に入れたようなものです
これは、オブジェクトが参照値 (ヒープ データ) であるためです
参照値と言えば、
JavaScript での参照値は次のとおりです。オブジェクト
ここで、配列は特別なオブジェクトであり、関数も特別な実行可能オブジェクトであることに注意してください。これをコピーする必要があり、対応する浅いクローン オブジェクトについては、参照値を取得するだけです。理解していなくても問題ありません。コードを読めばわかります。まず、浅いクローン オブジェクトを見てみましょう。どうやって CET-6 に合格したのか本当にわかりません)
for-in についてはパフォーマンスに小さな問題があります。興味のある方はチェックしてみてください。他の記事を参照してください。
ポータル o( ̄▽ ̄)d
このコードは非常に簡単です。 , これ以上は説明しません
Chrome コンソールを見てみましょう

とてもいいですね

次に、今すぐ 1 つのことを行います

新しい家に人を追加します





これは「新しい家」は新しいものではないので、変数名に混同しないでください

したがって、参照値があります。浅いクローン作成は使いにくいです

ディープクローンオブジェクト

この場合、どうすればよいですか
欲しいので新しいオブジェクトを取得するには、新しいオブジェクトを作成し、古いオブジェクトの内容を新しいオブジェクトにコピーします
オブジェクト内にオブジェクトがあるかどうかは別の質問になります

その後、作成と追加のプロセスを繰り返し続けることは明らかです。ループ処理

しかし、ループには2種類あります


反復

再帰



再帰の方が優れているのは間違いありません

再帰ループでは、終了条件を満たす条件が満たされたときに、レイヤーごとに最後まで返します。その後、参照値がなくなるまで再帰によってレイヤーごとに参照値を見つけることができます。
    var obj1 = {name: 'payen'};var obj2 = obj1;
    ログイン後にコピー
  • 上に書かれている if は 3 項の使用に非常に適しています。オペレーターですが、冗長すぎると思います。強迫性障害のため、読むのが非常に不快です。これが実際にディープクローンであることを証明するために、意図的に元の家をより複雑にしました。関数を考慮してください。複雑なクローン作成、面倒であまり意味がありません)

    今回は実際に新しい家です

  • 拡張しません
  • 新しいオブジェクトの参照値が変更されると、古いオブジェクトは変更されていません
また、プロトタイプ チェーン上のオブジェクトのディープ クローン作成も実装されます

原理は同じです

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);
ログイン後にコピー

上記は JavaScript のディープ クローン オブジェクトの内容です。さらに関連する内容については、PHP に注意してください。中国語のウェブサイト (www.php.cn)!



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート