定义一个对象, 如何对这个对象实现深拷贝呢?
let obj = {
name: 'zs',
age: 18,
fn: function() {
console.log('吃饭');
}
}
递归实现
- 创建一个新容器, 存放我们需要拷贝的值
- 循环需要拷贝对象的属性
- 如果是简单数据类型, 直接去拷贝, 如果是引用数据类型, 就去进行递归
function MyDeepclone(source) {
// 1.建立一个新容器
let targetObj = Array.isArray(source) ? [] : {}
// 2.遍历
for(let key in source) {
if(source.hasOwnProperty(key)) {
// 3.基础类型和引用类型
if(source[key] && typeof source[key] === 'object') {
// 引用类型-递归
targetObj[key] = MyDeepclone(source[key])
} else {
// 基础类型-赋值
targetObj[key] = source[key]
}
}
}
return targetObj
}
快捷深拷贝
缺点: 不能拷贝对象中的方法
JSON.parse(JSON.stringify(obj))