Method 1
function clone(obj){
var o;
switch(typeof obj){
case 'undefined': break;
case 'string' : o = obj '';break;
case 'number' : o = obj - 0 ;break;
case 'boolean' : o = obj;break;
case 'object' :
if(obj === null){
o = null;
}else{
if(obj instanceof Array){
o = [];
for(var i = 0, len = obj.length; i < len; i ){
o.push(clone (obj[i]));
}
}else{
o = {};
for(var k in obj){
o[k] = clone(obj[k ]);
}
}
}
break;
default:
o = obj;break;
}
return o;
}
Method 2
function clone2( obj){
var o, obj;
if (obj.constructor == Object){
o = new obj.constructor();
}else{
o = new obj. constructor(obj.valueOf());
}
for(var key in obj){
if ( o[key] != obj[key] ){
if ( typeof(obj[ key]) == 'object' ){
o[key] = clone2(obj[key]);
}else{
o[key] = obj[key];
}
}
}
o.toString = obj.toString;
o.valueOf = obj.valueOf;
return o;
}
Method 3
function clone3(obj){
function Clone( ){}
Clone.prototype = obj;
var o = new Clone();
for(var a in o){
if(typeof o[a] == "object") {
o[a] = clone3(o[a]);
}
}
return o;
}