JavaScript オブジェクトをディープクローンするにはどうすればよいでしょうか?
や のようなフレームワークに基づいたさまざまな機能があることは知っていますがJSON.parse(JSON.stringify(o))
、$.extend(true, {}, o)
そのようなフレームワークは使用したくありません。
ディープクローンを作成する最もエレガントで効率的な方法は何ですか。
配列のクローン作成などのエッジケースには注意を払います。プロトタイプ チェーンを壊さず、自己参照を処理します。
DOM オブジェクトのコピーをサポートするかどうかは気にしません。.cloneNode
その理由は、そのために存在するからです。
ES5 でディープクローンを主に使用したいので、node.js
V8 エンジンの 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
o
JS で JS パーサーを記述せずに、オブジェクトを複製し、複製時に同じ状態を持ちながら状態を変更できないクローン関数を記述する方法はありますか。
現実世界では、このような機能はもう必要ないはずです。これは単なる学術的な興味です。
ベストアンサー1
非常に簡単な方法ですが、単純すぎるかもしれません。
var cloned = JSON.parse(JSON.stringify(objectToClone));