如何创建重复对象。

13 浏览
0 Comments

如何创建重复对象。

我有一个像下面这样的对象,其中包含嵌套的对象。

var g = {
    "steps": [{
        "location": [{
            "a": "1"
        }, {
            "a": "2"
        }]
    }]
};

我使用`Object.create(g)`创建了一个重复的对象。

问题是,如果我在`h`中进行任何修改,`g`也会反映出来。我该如何防止这种情况发生?我尝试使用`underscore`函数(`clone`)。

修改后:

h["steps"][0]["location"][0]["a"]="3"

修改后:

`g`看起来像这样:

enter image description here

`h`看起来像这样:

enter image description here

即使我在`h`中进行任何修改,也不应该影响到`g`。

有人可以帮帮我吗?

谢谢。

0
0 Comments

问题的出现原因是在创建对象的副本时,使用了浅拷贝的方法。浅拷贝会导致嵌套的对象或数组通过引用进行复制,而不是进行重复复制。

解决方法是使用深拷贝的方法来创建对象的副本。如果要复制的对象没有附加任何方法或变量,可以使用以下代码来进行深拷贝:

var h = JSON.parse(JSON.stringify(g));

这样可以实现深拷贝。

需要注意的是,如果对象存在循环引用,可以使用这个答案中描述的技术来解决。

另外,还要注意避免使用具有非标准原型的对象,以免出现问题。

0