配列とオブジェクトのコピー
配列は参照をわたしてるので、
var ary = [1, 2, 3]; var copyAry = ary; copyAry[0] = 0;
とすると、aryの方も[0, 2, 3]となってしまう。
解決方法を考える。
var ary = [1, 2, 3]; var copyAry = []; for(var i = 0; i < ary.length; i++){ copyAry[i] = ary[i] }
ってやるのも手だけど、いまいち。
新しい配列返せばいいから、
var ary = [1, 2, 3]; var copyAry = ary.slice(0);
とすればうまくいく。
他の方法もあるのか調べてみたら、
Array.prototype.clone = function() { return Array.apply(null, this); }
と、clone関数を作っていたりするのを見つけた。
こっちのほうがかっこいいな。
で、じゃあ、オブジェクトはどうしたらいいんだろうと調べたら、
function clone(obj) { var f = function(){}; f.prototype = obj; return new f; }
とprototype継承を使った方法があるようだ。なるほどー!
すごく美しい。
鳥肌たった。