var obj = {
name : "abc",
age : 123,
card : ['visa','master'],
wife : {
name : "bcd",
son : {
name : "aaa"
}
}
}
var obj1 = {}
function deepClone(origin, target){
var target = target || {}, //初始化对象,如果target不存在就赋值为{}空对象
toStr = Object.prototype.toString,
arrStr = "[object Array]";
// 遍历原始对象
for(var prop in origin){
// 判断是不是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;
}
js-深度拷贝
最新推荐文章于 2024-09-15 20:31:42 发布