function deepClone(origin, target) {
var target = target || {}, //没给第二个参数就给个空数组
toStr = Object.prototype.toString, //简化代码
arrStr = "[object,Array]"; //简化代码
for (var prop in origin) { //for in循环开始
if (origin.hasOwnProperty(prop)) { //判断是不是自己的元素
if ((origin[prop] !== null) && (typeof (origin[prop]) == 'object')) {
//循环遍历对象,如果不是null且是对象的话
if (toStr.call(origin[prop]) == arrStr) { //是对象的情况下判断是不是数组
target[prop] = []; //是数组的话创建一个新数组
} else {
target[prop] = {}; // 是对象的化创建一个新对象
}
deepClone(origin[prop], target[prop]); //开始递归使用深度克隆
} else {
target[prop] = origin[prop]; //如果不是对象就直接克隆了
}
} //判断是否是自己元素 结尾
}
return target; //函数返回值
}
这样的话就不会出现浅克隆里面,对象里面有些存引用值的属性地址被两者共用的问题