1.遍历对象 for(var prop in obj)
2.判断是不是原始值 typeof()
3.判断是数组还是对象 instanceof toString constructor
4.建立相应的数组或对象
5.递归
var obj = {
name : "abc",
age : 123,
card : ['visa','master'],
wife : {
name : "bcd",
son : {
name : "aaa"
}
}
}
function deepClone(origin,target){
var target = target || {},
toStr = Object.prototype.toString,
arrStr = "[object Array]";
for(var prop in origin){//遍历对象
if(origin.hasOwnProperty(prop)){//判断是不是原型链上的
if(origin[prop] !== "null" && typeof(origin[prop]) == 'object'){//判断是不是原始值
if(toStr.call(origin[prop]) == arrStr){//判断是对象还是数组
target[prop] = [];
}else{
target[prop] = {};
}
deepClone(origin[prop],target[prop]);//递归
}else{
target[prop] = origin[prop];//原始值
}
}
}
return target
}