对象深度克隆

是否遇到过这样的事情

let obj = {
name: 'test',
age: 1
}
_obj.age = 2
console.log(obj.age) // 2
console.log(_obj.age) // 2

因为javascript的内存机制导致我们在克隆对象的是浅克隆,相当于我们只是复制了指针。其实他们指向的原地址是一样的。

深度克隆

let obj = {
        name: 'test',
        age: 1
      }
function cloneObj(obj) {
        let newObj = obj.constructor === Array ? [] : {}
        if (typeof obj !== 'object') {
          return
        } else {
          let str = JSON.stringify(obj)
          newObj = JSON.parse(str)
        }
        return newObj
    }
      const _obj = this.clone(obj)
      _obj.age = 2
      console.log(obj.age) // 1
      console.log(_obj.age) // 2
function clone(obj) {
        let newObj = obj.constructor === Array ? [] : {}
        for (let key in obj) {
          newObj[key] = obj[key]
        }
        return newObj
      }
let a = {
        name: 'a',
        age: 11
      }
      let b = Object.assign({}, a)
      b.name = 'b'
      console.log(a.name) // a
      console.log(b.name) // b

要下班了,写到这里了!

你可能感兴趣的:(对象深度克隆)