質問:
オブジェクトx
があってそれをオブジェクトy
としてコピーしたいんだけど(y
への変更がx
を変更しないように)。
built-inJavaScriptオブジェクトからコピーしたオブジェクトは不要なプロパティが余分に追加されてるのは知ってるんだけど。これは問題じゃないんだ。なぜって僕はリテラルとして構築されたオブジェクトの1つをコピーしているからです。
JavaScriptオブジェクトを正しくクローンするにはどうすればいいかな?
回答1:
jQueryを使用すると、extendで浅い(shallo)コピーができる:
|
copyObjectへのその後の変更はoriginalObjectに影響しない。逆もしかり。
それかディープコピーを作成するには:
|
回答2:
オブジェクト内で関数を使用しない場合は、非常に簡単なワンライナーが使える:
|
これは、オブジェクト、配列、文字列、ブーリアンと数字を含むどんな種類のオブジェクトに対しても動作する。
また、ブラウザの構造化クローンアルゴリズムについてのこの記事を参照。これはワーカーに、またはワーカーからメッセージを投稿するときに使われる。ディープクローニングの関数も含んでる。
回答3:
ECMAScript 6には、Object.assignメソッドが使える。これは、列挙可能なすべてのプロパティの値をあるオブジェクトから別のオブジェクトにコピーする。例えば:
|
ただし、ネストされたオブジェクトは引き続き参照としてコピーされることに注意。