从函数中,我想返回作为参数传递的对象的修改版本,而不影响原始对象(即无副作用)。所以基本上我想通过价值来传递。我试图通过修改和返回对象的(深层)复制版本来做到这一点。但是我现在发现我对克隆对象所做的修改仍然影响原始对象。
下面的代码片段演示了这一点,因为在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();
我怎样才能解决这个问题?
答案 0 :(得分:1)
尝试这个我认为它的工作方式就像你想要的那样。您需要将可变数据附加到对象。你这样做的方式把它变成了一个带闭包的变量,所以它没有被复制。
var clone = function(oldObject) {
return jQuery.extend(true, {}, oldObject);
}
var objf = function() {
this.data = {list:[1],dic:{a:'3'}};
this.modifyMyData = function() {
this.data.list.push(3);
this.data.dic['e'] = 10;
}
this.getData = function() {
return this.data;
}
}
var old = new objf();
var newo = clone(old);
newo.modifyMyData();