【问题标题】:Copying an object javascript in order to pass by value复制对象javascript以按值传递
【发布时间】:2012-04-25 09:49:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript object pass-by-value


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 2013-02-09
      • 2011-12-15
      • 1970-01-01
      • 2020-05-28
      • 2011-11-21
      • 2020-03-17
      • 1970-01-01
      相关资源
      最近更新 更多