2012-04-13 47 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();