JS实现深复制方法
1.JSON方法实现
json.stringify() //转化成json字符串
json.parse() //将json字符串转化成对象
这种方法的深复制不能复制不可枚举属性
2.递归法实现
<script>
function cloneObj(targetObj,sourceObj) {
var names=Object.getOwnPropertyNames(sourceObj);
for(var i=0;i<names.length;i++){
var desc=Object.getOwnPropertyDescriptor(sourceObj,names[i]);
if(typeof desc.value==="object" && desc.value!==null){
var obj=new desc.value.constructor;
cloneObj(obj,desc.value);//把obj当成引用对象带入递归函数继续给obj赋值
Object.defineProperty(targetObj,names[i],{
enumerable:desc.enumerable,
writable:desc.writable,
configurable:desc.configurable,
value:obj
});
continue;
}
Object.defineProperty(targetObj,names[i],desc);
}
return targetObj;
}
</script>
这种方法也还有一定缺陷,只能对函数类型进行潜复制,仍然保持引用关系