深拷贝 deepAssign

时间:2023-03-09 13:13:53
深拷贝 deepAssign

实现代码:

<script type="text/javascript">

    Object.deepAssign = function() {
var args = Array.from(arguments);
return args.reduce(deepClone,args[0]); function deepClone(target,obj){
if(!target) target = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
target[key] = deepClone(target[key],obj[key]);
}else{
//如果不是,简单复制
target[key] = obj[key];
}
}
}
}
return target;
}
}
// 测验代码
var obj1 = {a:1, b:2},
obj2 = {
a:4,
rules: {
code: 'sn0-101',
text: '芯片'
}
},
obj3 = {
addrs: {
bj: '北京',
sh: '上海'
}
}; Object.deepAssign(obj1,obj2,obj3);
obj1.rules.name = '语言'; console.log(obj1,obj2,obj3);
</script>

测验结果:

深拷贝 deepAssign