js实现引用对象的深度复制
来源:互联网 发布:百利进销存软件网络版 编辑:程序博客网 时间:2024/05/18 13:06
如果要复制下面这样一个对象:
var xm={age:20,name:'li',fa:[1,2],gf:{sex:'femal',family:[9,8]}}
只用for in循环是远远不够的,因为内部的fa数组和gf对象就只是取得了引用地址,复制后的对象和xm对象引用的是同样的一个fa和gf
如果想实现深度复制怎么办?主要可以考虑下面两种情况:数组、对象。
数组和对象的复制可以通过for in循环里嵌套一个循环来解决。但是这么嵌套下去也不是个办法啊,这时候函数递归就起到了作用,比如下面:
function copyObj(obj) {var newobj={};for(var j in obj){if (obj[j] instanceof Array) {newobj[j]=copyArray(obj[j]);}else if(obj[j] instanceof Object){newobj[j]=arguments.callee.call(null,obj[j]);}else{newobj[j]=obj[j];}}function copyArray(arr) {var newarr=[];for(var i in arr){newarr[i]=arr[i];}return newarr;}return newobj;}
调用:
var xm={age:20,name:'li',fa:[1,2],gf:{sex:'femal',family:[9,8]}}var xh=copyObj(xm);console.log(xh);console.log(xm);检验:
console.log(xh);console.log(xm);xh.gf.family[0]='mail';
打印结果显示,深度复制成功,看标红的地方,是不是不一样,说明引用的是两个不同的对象。
qwr.html:40 {age: 20, name: "li", fa: Array(2), gf: {…}}age: 20fa: (2) [1, 2]gf: family: (2) [9, 8]sex: "femal"__proto__: Objectname: "li"__proto__: Object
阅读全文
0 0
- js实现引用对象的深度复制
- JS 实现对象深度复制
- 有关序列化实现引用对象深度复制的几种方法 !
- 对象的深度复制
- 对象的深度复制
- JAVA 对象深度复制实现
- js深度复制代码实现
- JS对象简单、深度克隆(赋值与引用的区别)
- JS对象简单、深度克隆(赋值与引用的区别)
- 关于对象的深度复制
- js对象的复制
- js对象的复制
- JS对象深度克隆实现
- js实现对象深度拷贝
- js的对象引用
- AS3中对象的深度复制
- js对象的深度克隆!
- js对象的深度克隆
- jzoj5410【NOIP2017提高A组集训10.22】小型耀斑
- Redis服务停止报错解决方案[NOAUTH Authentication required]
- 关于树的重心的问题
- windows下创建lua
- P2885 [USACO07NOV]电话线Telephone Wire
- js实现引用对象的深度复制
- 解析JSON格式数据常见方法
- pandas
- 14.5.2.3 一致性非阻塞读
- 258. Add Digits
- android theme.appcompat.light找不到资源的错误
- Mysql查询语句使用select.. for update导致的数据库死锁分析
- 快速排序
- C++数据结构:二叉树(一)——先序建立二叉树