2012-04-13 48 views
0

从函数中,我想返回作为参数传递的对象的修改版本,而不影响原始对象(即免费提供副作用)。所以基本上我想通过价值传递。我试图通过修改和返回(深)复制版本的对象来实现这一点。不过,我现在发现,我对克隆对象所做的修改仍然会影响到原始内容。复制对象javascript以便通过值传递

下面的代码片段演示了这一点,因为呼吁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(); 

数据我怎样才能解决这个得到什么?

回答

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();