2012-02-09 9 views
2

を使用して新しいオブジェクトを作成:は、私は次のオブジェクトリテラル持つオブジェクトリテラルに

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

を今私は、同じオブジェクトの別のインスタンスをしたいです。私は、コンストラクタを使用している場合は、私が「新しい」演算子を使ってこれを行うことができ、すなわち:

b = new a(); 

は、どのようにオブジェクトリテラルを使用して、オブジェクトの新しいインスタンスを作成するには? /:

+0

を参照してくださいObject.createためMDNシムを取得することができますObject.create

var b = Object.create(a); console.log(b.a); //1 console.log(b.b); //2 

DEMO

でそしてもちろんだろう/stackoverflow.com/questions/728360/copying-an-object-in-javascript –

答えて

3

最も簡単な方法は、古いブラウザをサポートする必要がある場合、あなたはHTTP here

+0

この方法を使用すると、気をつけなければメモリリークが発生する危険性はありませんか?オブジェクトがこのように繰り返しクローン化された場合、プロトタイプチェーンが拡大し、プロトタイプチェーン内のオブジェクトはアクティブな参照が残っているため、ガベージコレクションされません。ほとんどのJavaScriptスクリプトは短命ですので、大きな問題ではありませんが、この可能性を認識することが賢明でしょう。 –

+0

@CDSanchez - ええ - 新しいオブジェクトは古い - [デモ](http://jsfiddle.net/eXgx3/1/)のプロトタイプを共有しているようです - 私はプロトタイプが成長するとは思わない。 'a'を100回クローンすると、100個のオブジェクトが参照され、' a'に戻ります。だからええ、「a」はガベージコレクションできませんでしたが、私はそれを巨大な問題として見ません –

+0

私が何を指していたかは、何らかの形でクローン化されたオブジェクトを何とか保持していた場合でした。たとえば、 'a = {};ループ99回{a = Object.create(a)} 'この場合、プロトタイプチェーンの最後に100個のオブジェクトがあり、先頭に99個のオブジェクトがあります。実際に誰かがこのようなことをする可能性は完全には想像もできません。とにかく、これはおそらくOPに影響しないので、それを残しておきます - 私はこれを指摘したいだけでした。 –

関連する問題