我很困惑。我从myObjOne
创建一个副本,然后我从myObjOne
中删除一个条目,JS也在我的副本(myObjTwo
)中删除该条目?但是为什么呢?
myObjOne = {};
myObjOne['name'] = 'xxx';
myObjOne['id'] = 'yyy';
myObjOne['plz'] = 'zzz';
// clone
myObjTwo = myObjOne;
// remove something
delete myObjOne['name'];
console.dir(myObjTwo);
发布于 2011-11-01 19:40:11
更新:删除Object.create
作为一种克隆方法,如评论所示。
myObjTwo = myObjOne;
不克隆。它只是简单地复制引用。
如果要克隆,可以使用JSON.parse
和JSON.stringify
var x = {a:{b:{c:{'d':'e'}}}};
var y = JSON.parse(JSON.stringify(x)); //y is a clone of x
console.log(y.a.b.c.d); //prints e
console.log(y === x); //prints false
警告:正如在评论中提到的那样,这个基于JSON的克隆不会在输出对象中保留输入对象的方法。如果你的对象不包含任何方法,这个解决方案就足够好了。方法是作为函数的对象的属性。如果为var obj = {add : function(a,b){return a+b;}}
,则add
是obj
的一种方法。
如果你需要一个支持方法复制的解决方案,那么就来看看这些SO的答案(正如musefan,Matt和Ranhiru Cooray指出的那样)
发布于 2011-11-01 19:38:03
您可以像这样使用jQuery:
var myObjTwo = jQuery.extend(true, {}, myObjOne);
第一个参数表明我们想要制作一个myObjOne
的深度副本。
发布于 2011-11-01 19:39:07
这不是你克隆的方式,那仅仅是在一个额外的变量中存储相同的原始对象。也许this answer会帮你
https://stackoverflow.com/questions/7965822
复制相似问题