一、简单对象的深拷贝
简单对象
- 不含函数
- 不含Symbol
- 无需拷贝 descriptor(描述符)
- 无回路
let newObj = JSON.parse(JSON.stringify(obj));
二、较复杂对象的深拷贝
较复杂对象:
- 包含函数
- 不含Symbol
- 无需拷贝 descriptor(描述符)
- 无回路
let deepCopy = function(_obj){
/**
* 对较复杂对象进行深拷贝(递归拷贝)
*/
let result = Array.isArray(_obj)? []: {
};
for(let key in _obj){
if(typeof _obj[key] === 'object'){
result[key] = deepCopy(_obj[key]);
}
else{
result[key] = _obj[key];
}
}
return result;
}
三、更复杂对象的DFS深拷贝:
更复杂对象:
- 包含函数
- 包含Symbol
- 需拷贝 descriptor(描述符)
- 无回路
let deepCopy = function(_obj){
/**
* 更复杂对象的深拷贝
* 1. 借助Object.getOwnPropertyDescriptors(o) 可以获得所有的属性描述符
* 2. 借助Object.defineProperties(o, descriptors) 可以设置对象的多个属性描述符
* 3. 借助Reflect.ownKeys(o) 可以获取对象的所有本地属性(包