对象深拷贝

对象深拷贝是我们开发经常遇到的,请看下面的列子:

let obj1 = {
  name: "minmin",
  message: {
    age: 18
  }
}
let obj2={...obj1};
obj2.message.age=22;
console.log(obj2.message.age)
console.log(obj2.message.age)

当我修改obj2中的age属性时,obj1中的age属性也会修改,原因是,obj2对obj1只是浅拷贝,而obj1.message与obj2.message指向的还是同一个引用地址,具体请看下图

对象深拷贝_第1张图片

那么该如何实现深度拷贝呢,其实很简单。 

 let obj1 = {
  name: "minmin",
  message: {
    age: 18
  }
}
function clone(origin){
  let newObj = {}
  for(key in origin) {
    if(typeof origin[key]=='object'){
      // 深度拷贝
      newObj[key] = clone(origin[key])
    } else {
      newObj[key] = origin[key]
    }
  }
  return newObj;
}
let obj2 = clone(obj1)

 我们只需要判断拷贝的对象如果还是对象的话就继续回调

 

你可能感兴趣的:(前端面试必备知识)