なんとなく書いたプログラミングコード。
JavaScriptでオブジェクト a と b があったとして、
とすると、オブジェクト b が オブジェクト a に代入されるが、それは参照を代入しているだけだ。
だから、
としても、 a.name も b.name も どちらも "BBB" である。
そこで、新しいインスタンスを作成し、内容をコピーする copyObject なる関数を作ってみた。
これを使って、以下のようにすると
最初の表示では "BBB/BBB" だが、次の表示は "AAA/BBB" である。
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" である。
| ホーム |
SHOJI's Code



