原生js实现对象的深度克隆
- 判断是不是原始值(另外是引用值)
- 判断是数组还是对象
- 判断相应的数组或对象
e.g.将obj克隆到obj1上且互不影响
var obj={
name: "wxy",
age: 20,
headset : ['wf','powerbeats'],
son : {
name: "wjx",
son : {
age:1
}
}
}
var obj1 = {}
function deepClone (origin,target) {
var target = target || {} ,
toStr = Object.prototype.toString,
arrstr = "[Object Array]";
for(var prop in origin){
if(origin.hasOwnProperty(prop)){ //判断属性是否为对象本身属性还是继承来的属性
if(typeof(origin[prop])=='Object'){ //如果不是原始值则判断是数组还是对象
target[prop] = (toStr.call(origin[prop])==arrstr) ? [] : {}; //通过call()改变Object指向 调用看是什么类型
deepClone(origin[prop] , target[prop]);
}else{ //是原始值直接克隆
target[prop]=origin[prop];
}
}
}
return target;
}
deepClone(obj,obj1);
console.log(obj1);