deep clone
http://javascript.about.com/od/objectorientedjavascript/a/oop17.htmを参考にちょっと書いてみた。
function clone(obj) { var clonedObject = {}, keys = Object.keys(obj), i = keys.length, value; for (; i--;) { value = obj[keys[i]]; if (value !== null && typeof value === 'object') { clonedObject[keys[i]] = (value.constructor === Array) ? value.concat() : clone(value); } else { clonedObject[keys[i]] = value; } } return clonedObject; }
RegExpとかDateもコピー出来るといいのかなーと思ったけど面倒でやめた……
書いておいてなんだけど使わないだろうなー。
追記:
id:ishiducaさんがRegExpのコピーについて書いてくださいました。
https://gist.github.com/4050905
人のコードは参考になるなー。なるほどー。
追記2:
Array.concatしても、中にオブジェクト持ってたらちゃんとコピーできないじゃん!
追記3:
モジュール書いた!deepcopyを書いたよ - 四角革命前夜