javascript浅拷贝与深拷贝
来源:互联网 发布:网络水军如盛 编辑:程序博客网 时间:2024/05/16 14:01
比如,现在有一个对象,叫做”中国人”。
var Chinese = { nation:'中国' };
还有一个对象,叫做”医生”。
var Doctor ={ career:'医生' }
浅拷贝
把父对象的属性,全部拷贝给子对象。
function extendCopy(p) { var c = {}; for (var i in p) { c[i] = p[i]; } c.uber = p; return c; }
使用的时候,这样写:
var Doctor = extendCopy(Chinese); Doctor.career = '医生'; alert(Doctor.nation); // 中国
但是,这样的拷贝有一个问题。那就是,如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。
请看,现在给Chinese添加一个”出生地”属性,它的值是一个数组。
Chinese.birthPlaces = ['北京','上海','香港'];
通过extendCopy()函数,Doctor继承了Chinese。
var Doctor = extendCopy(Chinese);
然后,我们为Doctor的”出生地”添加一个城市:
Doctor.birthPlaces.push('厦门');
发生了什么事?Chinese的”出生地”也被改掉了!
alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门 alert(Chinese.birthPlaces); //北京, 上海, 香港, 厦门
所以,extendCopy()只是拷贝基本类型的数据,我们把这种拷贝叫做
浅拷贝
。这是早期jQuery实现继承的方式。
深拷贝
所谓”深拷贝”,就是能够实现真正意义上的数组和对象的拷贝。它的实现并不难,只要递归调用”浅拷贝”就行了。
function deepCopy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === 'object') { c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i], c[i]); } else { c[i] = p[i]; } } return c; }
使用的时候这样写:
var Doctor = deepCopy(Chinese);
目前,jQuery库使用的就是这种继承方法。
0 0
- Javascript浅拷贝与深拷贝实现
- Javascript浅拷贝与深拷贝实现
- JavaScript的深拷贝与浅拷贝
- Javascript中的深拷贝与浅拷贝
- javascript浅拷贝与深拷贝
- JavaScript实现深拷贝与浅拷贝
- JavaScript浅拷贝与深拷贝浅析
- JavaScript中的深拷贝与浅拷贝
- JavaScript中的浅拷贝与深拷贝
- javascript的浅拷贝与深拷贝
- JavaScript 深拷贝 & 浅拷贝
- javascript prototype 浅拷贝与 深拷贝, . 号与[]号
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 04_替换空格
- 电线的一些小知识学习一下
- 省赛的总结
- 旋转矩阵(Rotate Matrix)的性质分析
- JQuery树形控件
- javascript浅拷贝与深拷贝
- 在线查看android源码方法
- Linux CentOS 节点之间的SSH无密钥登录配置
- Ubuntu 下安装Go语言
- Maven坐标和依赖
- Jenkins获取git提交记录并上传fir.im
- 欢迎使用CSDN-markdown编辑器
- 报销审批流程
- 搜索——H——找n的倍数(0,1组成的)