复制对象javascript以传递值

时间:2012-04-13 00:53:49

标签: javascript object pass-by-value

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

下面的代码片段演示了这一点,因为在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 个答案:

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