2012-02-09 61 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