首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript -如何克隆对象?

Javascript -如何克隆对象?
EN

Stack Overflow用户
提问于 2011-11-01 19:35:29
回答 8查看 35.7K关注 0票数 19

我很困惑。我从myObjOne创建一个副本,然后我从myObjOne中删除一个条目,JS也在我的副本(myObjTwo)中删除该条目?但是为什么呢?

代码语言:javascript
复制
  myObjOne = {};
  myObjOne['name'] = 'xxx';
  myObjOne['id'] = 'yyy';
  myObjOne['plz'] = 'zzz';  

  // clone
  myObjTwo = myObjOne;

  // remove something
  delete myObjOne['name'];

  console.dir(myObjTwo);

示例 http://jsbin.com/itixes/edit#javascript,html

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-01 19:40:11

更新:删除Object.create作为一种克隆方法,如评论所示。

代码语言:javascript
复制
  myObjTwo = myObjOne;

不克隆。它只是简单地复制引用。

如果要克隆,可以使用JSON.parseJSON.stringify

代码语言:javascript
复制
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;}},则addobj的一种方法。

如果你需要一个支持方法复制的解决方案,那么就来看看这些SO的答案(正如musefan,Matt和Ranhiru Cooray指出的那样)

我建议使用How do I correctly clone a JavaScript object?

票数 24
EN

Stack Overflow用户

发布于 2011-11-01 19:38:03

您可以像这样使用jQuery:

代码语言:javascript
复制
var myObjTwo = jQuery.extend(true, {}, myObjOne);

第一个参数表明我们想要制作一个myObjOne的深度副本。

票数 16
EN

Stack Overflow用户

发布于 2011-11-01 19:39:07

这不是你克隆的方式,那仅仅是在一个额外的变量中存储相同的原始对象。也许this answer会帮你

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7965822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档