对象深度克隆

是否遇到过这样的事情

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

要下班了,写到这里了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • (a fork of Airbnb's Javascript Style Guide) Strikingly ES...
    飘零_zyw阅读 1,190评论 1 2
  • JavaScript之父:Brendan Eich 。 -基本语法:借鉴了C语言和Java语言。-数据结构:借鉴了...
    饥人谷_kule阅读 610评论 0 0
  • ES6 箭头函数、函数扩展 ES5: function add(a,b){return a+b;}console....
    紫由袅阅读 366评论 0 1
  • 看了很多关于信任的定义,但从个人而言,我对信任的理解简单为四个字“选择相信”或是“愿意相信”。 大多数情况下,信任...
    简单君阅读 613评论 0 0