dom浅复制:
var image=this.cloneNode(false);
dom深复制:
var image=this.cloneNode(true);
JS的浅复制:
//浅复制:这种方法只能复制给目标对象
//如果复制多个属性对象时 后面的属性冲突会覆盖前面的
//原型属性不能复制 并且不能复制遍历属性 是否可写属性 冻结属性
//只是引用关系
var obj = {
a:1,
b:2,
c:{
d:5
}
};
var obj2 = Object.assign(obj);
obj.c.d=10;
console.log(obj2);
JS的深复制方法:
//深复制:
//其中的不是引用关系
//且不能对里面的属性做修改
var obj = {
a:1,
b:2,
c:{
d:5
}
};
var obj3 = JSON.parse(JSON.stringify(obj));
obj.c.d = 10 ;
console.log(obj3)
JS升级版深复制:
var obj = {
a:1,
b:2,
c:{
d:5
}
};
//深复制
function cloneObject(target,source){
var names = Object.getOwnPropertyNames(source);
for (var i=0;i<names.length;i++){
var desc = Object.getOwnPropertyDescriptor(source,names[i]);
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,
emumerable:desc.emumerable,
value:obj,
writable:desc.writable
});
cloneObject(obj,desc.value)
}else{
Object.defineProperty(target.names[i],{
configurable:desc.configurable,
emumerable:desc.emumerable,
value:obj,
writable:desc.writable
});
}
}
}