2012-02-09 67 views
2

我有以下对象字面:创建使用对象文本的新对象

var a = {a:1,b:2} 

现在我想同一个对象的另一个实例。如果我使用一个构造函数,我可以用“新”经营者做到这一点,即:

b = new a(); 

如何创建使用对象文本对象的新实例?

+0

请访问http:/ /stackoverflow.com/questions/728360/copying-an-object-in-javascript – 2012-02-09 03:51:47

回答

3

最简单的方法是用Object.create

var b = Object.create(a); 

console.log(b.a); //1 
console.log(b.b); //2 

DEMO

当然,如果你需要支持旧的浏览器,你可以得到MDN垫片为Object.createhere

+0

使用这种方法,如果你不小心,是不是有创建内存泄漏的风险?如果一个对象被重复地“克隆”,它的原型链将会增长,并且原型链中的所有对象将永远不会被垃圾收集,因为对它们的主动引用将会保留。这不是一个大问题,因为大多数JavaScript脚本都是短暂的,但我认为明智地注意到这种可能性。 – 2012-02-09 04:38:21

+0

@CDSanchez - 是的 - 新对象确实似乎分享旧的原型 - [demo](http://jsfiddle.net/eXgx3/1/) - 我不认为原型会增长。如果您将'a'克隆了100次,则会有100个对象返回到'a'。所以,'a'不能被垃圾收集,但我不认为这是一个巨大的问题 – 2012-02-09 05:04:59

+0

我指的是如果你以某种方式保留克隆也被克隆的对象。例如,'a = {};循环99次{a = Object.create(a)}'在这种情况下,你将有100个对象在原型链末端有原始数据,前面有99个对象。在实践中有人可能会这样做并不是完全不可能。无论如何,我会留下它,因为这可能不会影响OP - 我只是想指出这一点。 – 2012-02-09 05:33:13