あるオブジェクト x
があります。これをオブジェクト y
としてコピーし、y
を変更しても x
は変更されないようにしたいと思います。JavaScriptの組み込みオブジェクトから派生したオブジェクトをコピーすると、不要なプロパティが追加されることに気づきました。私がコピーしているのはリテラルで構築された私自身のオブジェクトなので、これは問題ではありません。
JavaScriptオブジェクトを正しくクローンするには?
この記事からHow to copy arrays and objects in Javascript by Brian Huisman:
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (var i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
オブジェクトに循環的な依存関係がない場合は、他の回答やjQueryのcopyメソッドを使用することをお勧めしますが、いずれも非常に効果的だと思われます。
循環的な依存関係がある場合(つまり、2つのサブオブジェクトが互いにリンクしている場合)は、(理論的な観点から)この問題をエレガントに解決する方法がないため、ちょっと困ったことになります。