配列とオブジェクトのコピー

配列は参照をわたしてるので、

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継承を使った方法があるようだ。なるほどー!
すごく美しい。
鳥肌たった。