JavaScript でディープクローンを作成する方法 質問する

JavaScript でディープクローンを作成する方法 質問する

JavaScript オブジェクトをディープクローンするにはどうすればよいでしょうか?

や のようなフレームワークに基づいたさまざまな機能があることは知っていますがJSON.parse(JSON.stringify(o))$.extend(true, {}, o)そのようなフレームワークは使用したくありません。

ディープクローンを作成する最もエレガントで効率的な方法は何ですか。

配列のクローン作成などのエッジケースには注意を払います。プロトタイプ チェーンを壊さず、自己参照を処理します。

DOM オブジェクトのコピーをサポートするかどうかは気にしません。.cloneNodeその理由は、そのために存在するからです。

ES5 でディープクローンを主に使用したいので、node.jsV8 エンジンの ES5 機能を使用することは許容されます。

[編集]

誰かが提案する前に、オブジェクトからプロトタイプを継承してコピーを作成することと、クローン前者はプロトタイプチェーンを混乱させます。

[さらに編集]

あなたの回答を読んで、オブジェクト全体を複製するのは非常に危険で難しいゲームだという厄介な発見に至りました。次のクロージャベースのオブジェクトを例に挙げてみましょう。

var o = (function() {
     var magic = 42;

     var magicContainer = function() {
          this.get = function() { return magic; };
          this.set = function(i) { magic = i; };
     }

      return new magicContainer;
}());

var n = clone(o); // how to implement clone to support closures

oJS で JS パーサーを記述せずに、オブジェクトを複製し、複製時に同じ状態を持ちながら状態を変更できないクローン関数を記述する方法はありますか。

現実世界では、このような機能はもう必要ないはずです。これは単なる学術的な興味です。

ベストアンサー1

非常に簡単な方法ですが、単純すぎるかもしれません。

var cloned = JSON.parse(JSON.stringify(objectToClone));

おすすめ記事