浅拷贝与深拷贝
- 这是指对象的拷贝操作
- 浅拷贝:代表只拷贝1层
- 深拷贝:代表不管有多少层都拷贝进来
-
- 深拷贝必须利用递归完成
- 代码如下
let p1 = {
name: 'jack',
age: 16,
nums: [10, 20, 30],
// 养宠物
pet: {
nickname: '旺财'
},
say: function () {
console.log('你好')
}
}
// 深拷贝:每一层都要拷贝
let p2 = {}
function deepCopy(newObj, sourceObj) {
for (let key in sourceObj) {
// 如果是引用类型(对象)还得继续往下遍历
// 遍历到只有基本类型再赋值
// 如果是数组,就得开辟成数组的空间
if (sourceObj[key] instanceof Array) {
// 首先要等于一个新对象,才会开辟新空间
newObj[key] = []
deepCopy(newObj[key], sourceObj[key])
} else if (sourceObj[key] instanceof Function) {
newObj[key] = sourceObj[key]
}else if (sourceObj[key] instanceof Object) {
// 首先要等于一个新对象,才会开辟新空间
newObj[key] = {}
deepCopy(newObj[key], sourceObj[key])
} else {
newObj[key] = sourceObj[key]
}
}
}
deepCopy(p2, p1) // 把p1拷贝给p2
p2.pet.nickname = '汪汪'
p2.nums[0] = 999
console.log(p1)
console.log(p2)