js的浅克隆和深度克隆
来源:互联网 发布:ios个人中心界面源码 编辑:程序博客网 时间:2024/05/23 19:26
听到这个名字的时候都被吓尿了。克隆听起来就很屌的样子。不过其实琢磨了一下根本没有什么好尿的——我特别讨厌一些人故作高深的摆出一副科学家的鸟样。
知乎上有一句话是这样的:
什么叫做理解了某一个概念?就是你可以用简单的语言把这个概念对你六岁的小侄女讲明白。
深度克隆就是:把一个对象里面的东西一模一样地复制到另一个对象,并且这两个对象分别放在内存的不同地方。
想象一个场景:我们希望给每一个注册用户建立一个数据模型,在此之前,我们要把这个用户的数据模型模板给创建出来:
以后每个注册用户都会根据这个模板来生成对象。可以说这个userTemplate就是父对象了。
现在来了一个新用户来注册,这个用户就是我非常喜欢的人民艺术家郭德纲。哈哈。我用这个模板对象复制一个新对象来,就像刚才说的,我写一个函数,把userTemplate对象的每一个属性都复制到这个新对象里,代码是这样的:
然后我们又来了一位用户,是位美女,于是我们用刚才写的函数新复制一个对象:
下面我在把模型插入数据库之前,我要打印出来三个对象看看内容是不是正确,打印的结果是这样的:
结果傻逼了,数组属性出现了问题,3个对象的数组属性都一样。
这很好理解,因为简单的复制对象,如果对象其中一个属性是引用型变量,就会出现这种情况,因为引用型变量保存的是内存地址,所以其实后来操作的都是同一块内存,导致了数组内容都一样。
对,刚才上面的那一套就是浅克隆,深克隆是什么?深克隆就是在克隆的时候判断一下属性的类型是不是引用型变量,如果是的话就用递归方法让它一层一层进去复制自己。
递归的深度克隆代码我贴到这里,因为没什么技术含量,所以没必要记录思路,只要代码就可以了。
然后用这个新写的函数去复制对象,重新让郭德纲和苍井空两位老师注册一下。
这样的话再打印出来看看:
这就是深度克隆了,其实是JS的继承的方法的一种。
- js的浅克隆和深度克隆
- js的浅克隆和深度克隆
- js深度克隆和浅度克隆
- 浅克隆和深度克隆
- Clone 方法的使用(深度克隆和浅克隆)
- Java的深度克隆和浅度克隆
- Java的浅度克隆和深度克隆
- Java浅度克隆和深度克隆
- java基础-深度克隆和浅克隆
- 赋值,浅克隆和深度克隆
- 浅度克隆和深度克隆
- js对象的深度克隆!
- JS深度克隆的理解
- js对象的深度克隆
- js对象的深度克隆
- 浅克隆与深度克隆
- 浅克隆与深度克隆
- js 深度克隆
- Java中的静态导入
- Mysql服务器重启后,客户端无法连接数据库
- PHP数组 按照某个元素排序
- 保留两位小数js代码
- R语言学习五
- js的浅克隆和深度克隆
- AndroidStudio打包后的apk,使用zipalign工具优化方法
- Datatables 加载数据 异步二次加载渲染表格及initComplete
- 不抱怨,向前看—2017年终总结
- jQuery处理html元素radio,input,button
- 首字母排序中英文
- 浙江中医药大学-数据结构与算法期末考试应用题、程序设计题
- 虚拟机串口通信
- AngularJs 1.6 开始移除$http success/erro 方法