function recursiveDeepCopy(o) { var newO, i; if (typeof o !== 'object') { return o; } if (!o) { return o; } if ('[object Array]' === Object.prototype.toString.apply(o)) { newO = []; for (i = 0; i < o.length; i += 1) { newO[i] = recursiveDeepCopy(o[i]); } return newO; } newO = {}; for (i in o) { if (o.hasOwnProperty(i)) { newO[i] = recursiveDeepCopy(o[i]); } } return newO; }
function jsonDeepCopy(o) { return JSON.parse(JSON.stringify(o)); }
function objectClone(o) { var r, f; if( o == null || typeof(o) != 'object' ) return o; f = function() {}; f.prototype = o; r = new f; for( var i in o) r[i] = objectClone(o[i]); return r; }
function recursiveDeepCopy2(o) { var newO, i; if (typeof o !== 'object') { return o; } if (!o) { return o; } if ( o.constructor === Array ) { newO = []; for (i = 0; i < o.length; i += 1) { newO[i] = recursiveDeepCopy2(o[i]); } return newO; } newO = {}; for (i in o) { newO[i] = recursiveDeepCopy2(o[i]); } return newO; }