创建方法 deepClone
:
function deepClone(obj) {
// 判断是否为基本数据类型
if (typeof obj !== 'object' || obj === null ) {
return obj;
}
// 根据对象的类型创建一个空的副本
let clone;
if (Array.isArray(obj)) {
clone = [];
} else {
clone = {};
}
// 遍历对象的属性并递归进行拷贝
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
使用该 deepClone
方法,可以深拷贝一个对象或数组,例如:
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = deepClone(obj1);
console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 1, b: { c: 2 } }
obj2.a = 3;
obj2.b.c = 4;
console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 3, b: { c: 4 } }
上述代码通过递归方法 deepClone
实现了深拷贝,保证了拷贝后的对象与原对象完全独立,互不影响。注意,该方法在处理循环引用时可能会导致栈溢出错误,需要根据实际情况进行适当的处理。