SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2018.09<<12345678910111213141516171819202122232425262728293031>>2018.11
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

なんとなく書いたプログラミングコード。

JavaScriptでオブジェクト a と b があったとして、
a = b

とすると、オブジェクト b が オブジェクト a に代入されるが、それは参照を代入しているだけだ。
だから、
a.name = "AAA";
b.name = "BBB";


としても、 a.name も b.name も どちらも "BBB" である。

そこで、新しいインスタンスを作成し、内容をコピーする copyObject なる関数を作ってみた。
function copyObject(src)
{
var dest;

if (typeof src == 'object') {
if (src instanceof Array) {
dest = new Array();
for (var i=0;i<src.length;i++) {
dest[i] = copyObject(src[i]);
}
}
else
{
dest = new Object();
for (prop in src) {
dest[prop] = copyObject(src[prop]);
}
}
}
else {
dest = src;
}
return dest;
}


これを使って、以下のようにすると
b.name = "BBB";

a = copyObject(b);
alert(a.name+"/"+b.name);

a.name = "AAA";
alert(a.name+"/"+b.name);


最初の表示では "BBB/BBB" だが、次の表示は "AAA/BBB" である。
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。