浅谈浅克隆和深度克隆复杂数据类型的数据

浅克隆

浅克隆可以把源对象上的数据复制到目标对象上去,对于源对象上简单数据类型可以完全复制,对于源对象上的复杂数据类型则复制的是引用地址,修改目标对象则源对象也会变

浅克隆可以用Object.assign(target,obj)方法来实现,可以把obj对象上的属性复制到target对象上

下面来实现手写浅克隆:

function myassign(obj1,obj2) {
    if(!(obj1 instanceof Object) || !(obj2 instanceof Object)) throw(new Error('参数必须是对象'))
    for(var key in obj2) {
      obj1[key] = obj2[key]
    }
    return obj1
  }

深克隆

深克隆是把源对象完全克隆到目标对象上,改变目标对象也不会影响到源对象

下面是手写的深度克隆函数:

 function deepClone(target,obj) {
    if(!(target instanceof Object) || !(obj instanceof Object)) throw(new Error('参数必须是对象'))
    for(var key in obj) {
        if(obj[key] instanceof Object) {
          let result = obj[key] instanceof Array ? [] : {}
          target[key] = deepClone(result,obj[key])
        }else {
          target[key] = obj[key]
        }
    }
    return target
  }

函数实现: 先判断参数是否是对象,然后根据循环判断源对象上的属性是简单数据类型还是复杂数据类型,简单类型直接复制,复杂数据类型利用递归调用的方式,对属性值接着遍历复制,直到完全克隆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值