如何插入一段漂亮的代码片
去如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。.我们怎么去实现深拷贝呢,这里可以递归递归去复制所有层级属性。 代码片:
.
这么我们封装一个深拷贝的函数(PS:只是一个基本实现的展示,并非最佳实践)
function deepClone (obj) {
// 判断需要拷贝的是什么类型÷
var objClone = Array.isArray(obj) ? [] : {};
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key] && typeof obj[key] === "object"){
//以下两种方法均可,callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。
objClone[key] = arguments.callee(obj[key]);
//objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
return objClone;
}
let a={
name:'ykl',
age:19,
play:{
doing:666666
}
},
b=deepClone(a);
a.play.six='nv';
a.play.doing = 99999;
console.log(a);
console.log(b);
可以看到:
本文转载于《【JS】深拷贝与浅拷贝的区别,实现深拷贝的几种方法 》