なんとなく書いたプログラミングコード。
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" である。
この間、知り合いのホームページを作るときにちょっと作ってみた。
function getJSON(obj)
{
switch (typeof obj) {
case 'number':
return obj;
case 'string':
obj = obj.replace('"', '\\"');
obj = obj.replace('\r', '\\r');
obj = obj.replace('\n', '\\n');
return '"'+obj+'"';
case 'object':
var arr = [];
if (obj instanceof Array) {
for (var i=0;i<obj.length;i++) {
arr.push( getJSON(obj[i]) );
}
return '['+arr.join(',')+']';
}
else {
for (prop in obj) {
arr.push( '"'+prop+'":'+getJSON(obj[prop]) );
}
return '{'+arr.join(',')+'}';
}
}
return "";
}
| ホーム |
SHOJI's Code



