博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归和深拷贝 浅拷贝
阅读量:6039 次
发布时间:2019-06-20

本文共 1033 字,大约阅读时间需要 3 分钟。

概念:

  • 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

你可能感兴趣的文章
【常见Web应用安全问题】---6、Script source code disclosure
查看>>
<html:form>标签
查看>>
除了《一无所有》,我一无所有
查看>>
每日英语:China Seeks to Calm Anxiety Over Rice
查看>>
C++中struct和class的区别 [转]
查看>>
C++ ofstream和ifstream详细用法
查看>>
Mysql 连接查询 Mysql支持的连接查询有哪些
查看>>
Hive Streaming 追加 ORC 文件
查看>>
打开Apache自带的Web监视器
查看>>
eclipse插件
查看>>
Android笔记:通过RadioGroup/RadioButton自定义tabhost的简单方法
查看>>
ELCSlider
查看>>
XCode工程中 Targets详解
查看>>
Ext.Msg.prompt的高级应用
查看>>
Postgres 中 to_char 格式化记录
查看>>
关于联合索引
查看>>
开源 java CMS - FreeCMS2.7 登录移动端管理中心
查看>>
Android FM模块学习之三 FM手动调频
查看>>
Python 设置系统默认编码以及其他编码问题大全
查看>>
Vbs脚本编程简明教程之十四
查看>>