SHOJI's Code
仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2009.06<<12345678910111213141516171819202122232425262728293031>>2009.08
オブジェクトのコピー (JavaScript)
なんとなく書いたプログラミングコード。

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" である。
オブジェクトをJSON形式に (JavaScript)
この間、知り合いのホームページを作るときにちょっと作ってみた。
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 "";
}

copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
FC2ブログ