<script>
// 封装一个深复制的函数
var obj={};
var obj1={
a:1,
b:2,
c:{
d:10,
e:20,
set f(value){
this.a=value;
},
get f(){
return this.a;
},
g:[1,2,3,4]
},
set function(value){
this.a=value;
},
get function(){
return this.a;
}
}
//函数的第一个参数为复制的目标 第二个参数为复制的源对象
function cloneObject(target,source){
//首先获取复制源对象下的所有属性;
var names=Object.getOwnPropertyNames(source);
console.log(names);
// console.log(source);
for(var i=0; i<names.length;i++){
//获取每一个属性的对象值
console.log("我是测试的");
var desc=Object.getOwnPropertyDescriptor(source,names[i]);
//判断 desc的value值的类型 区分object和array
if(typeof(desc.value)==="object"&& desc.value!==null){
var obj;
if(Array.isArray(desc.value)){
obj=[];
}else{
obj={};
}
Object.defineProperty(target,names[i],{
configurable:desc.configurable,
enumerable:desc.enumerable,
value:obj,
writable:desc.writable
});
//当值为引用类型时 调用自身 形成递归
cloneObject(obj,desc.value)
}else{
Object.defineProperty(target,names[i],desc);
}
}
}
cloneObject(obj,obj1);
// console.log(obj);
//console.log(obj1);
</script>
js 深复制
最新推荐文章于 2022-09-03 23:15:44 发布