美文网首页
对象的深拷贝和浅拷贝

对象的深拷贝和浅拷贝

作者: 练习时长2年半的个人练习生 | 来源:发表于2020-08-20 14:25 被阅读0次
    浅拷贝

    深拷贝,浅拷贝的根本区别在于 是否开辟新的内存空间存放复制实体.浅拷贝仅仅是指向了原来的对象内存地址..他们互相影响,深拷贝不会.

    Object.assign(target,obj1,obj2) 他会把遍历多个源数据的可枚举类型属性。然后把他们合并到target对象上,进行返回
    浅拷贝方法:

    // 实现的是浅拷贝
      var c = {
            age: 1,
            name: undefined,
            sex: null,
            tel: /^1[34578]\d{9}$/,
            say: () => {
                console.log('hahha')
            }
        }
    
        let b = Object.assign(c)
        c.sex = 1
        console.log(b.sex) //1
    

    深拷贝的实现

     
    
      function copy(obj) {
        let deep_copy_obj= obj=> {
          let new_obj = {}
          for (key in obj) {
            let dataType = Object.prototype.toString.apply(obj[key])
            if (dataType == '[object Object]') {
              for (let k in obj[key]) {
                new_obj[key] = deep_copy_obj(obj[key])
              }
            } else if (dataType == '[object Array]') {
              new_obj[key] = deep_copy_arr(obj[key])
            }
            else {
              new_obj[key] = obj[key]
            }
          }
          return new_obj
        }
    
        let deep_copy_arr= arr=>{
          let new_arr = []
          arr.forEach((item, i) => {
            let dataType = Object.prototype.toString.apply(item)
            if (dataType == '[object Array]') {
              new_arr[i] = deep_copy_arr(item)
            } else if (dataType == '[object Object]') {        
                new_arr[i] = deep_copy_obj(item)   
            }
            else {
              new_arr.push(item)
            }
          })
          return new_arr
        }
        return deep_copy_obj(obj)
      }
    

    相关文章

      网友评论

          本文标题:对象的深拷贝和浅拷贝

          本文链接:https://www.haomeiwen.com/subject/elawxktx.html