递归和深拷贝 浅拷贝

概念:

  • a:如果拷贝的时候, 将数据的所有引用结构都拷贝一份,

  • b:那么数据在内存中独立就是深拷贝(内存隔离,完全独立)

  • c:如果拷贝的时候, 只针对当前对象的属性进行拷贝, 而属性是引用类型这个不考虑, 那么就是浅拷贝

  • d:拷贝: 复制一份. 指将对象数据复制.

  • e:在讨论深拷与浅拷的时候一定要保证对象的属性也是引用类型.

实现方法: 如果要实现深拷贝那么就需要考虑将对象的属性, 与属性的属性,都拷贝过来

假设已经实现 clone ( o1, o2),将对象 o2 的成员拷贝一份交给 o1 递推关系 混合方法,将 o2 的成员拷贝到 o1 中

`function clone( o1, o2){
    for(var key in o2){
        o1[key] = o2[key];
    }
}`
复制代码

假设方法已经实现,如果 o2[key] 是对象 继续使用这个方法 需要考虑 o2[key] 是引用类型,再一次使用clone函数 如果 o2[key] 不是引用类型,那么直接赋值 临界条件 因为是 for in 循环,没有成员遍历时,自动结束 递归函数

`function clone(o1,o2){
     for(var key in o2){
         if(typeof o2[key] == 'object'){
             o1[key] = {};
             clone(o1[key],o2[key])
         }else{
             o1[key] = o2[key];
         }
     }
 }`
复制代码

复杂实现(一个参数) 原理: clone(o) = new Object; 返回一个对象 递归函数

function clone(o){
     var temp = {};
     for(var key in o){
         if(typeof o[key] == 'object'){
             temp[key] = clone(o[key]);
         }else{
             temp[key] = o[key];
         }
     }
     return temp;
 }
复制代码

转载于:https://juejin.im/post/5c473f9af265da61746524bc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>