0

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

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

我怎样才能解决这个问题?

4

1 回答 1

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();
于 2012-04-13T01:16:11.323 回答