関数から、元のオブジェクトに影響を与えずに(つまり、副作用がない)、引数として渡されたオブジェクトの変更バージョンを返したいと思います。だから本質的に私は価値を渡したいのです。オブジェクトの(ディープ)コピーされたバージョンを変更して返すことにより、これを実行しようとしました。ただし、クローンオブジェクトに加えた変更が、元のオブジェクトに影響を与えていることがわかりました。
newObjectでmodifyMyDataを呼び出すと、oldObjectのデータに影響するため、以下のコードスニペットはこれを示しています。
var clone = function(oldObject) {
return jQuery.extend(true, {}, oldObject);
}
var objf = function() {
var data = {list:[1],dic:{a:'3'}};
this.modifyMyData = function() {
data.list.push(3);
data.dic['e'] = 10;
}
this.getData = function() {
return data;
}
}
var old = new objf;
var newo = clone(old);
newo.modifyMyData();
どうすればこれを回避できますか?