js实现的对象深拷贝
2016-07-21 00:00
597 查看
摘要: js中对象的拷贝分为‘浅复制’和‘深复制’
如果一个对象中的所有属性值都是简单的值类型,要复制它很简单:
当要复制的对象中存在某一个属性的值类型是对象或者数组时,那么这样做子对象中该属性得到的只是一个内存地址,而不是真正复制。因此存在父对象被篡改的可能。
所谓"深拷贝",就是能够实现真正意义上的数组和对象的拷贝:
应用场景:非构造函数继承的一种方式
如果一个对象中的所有属性值都是简单的值类型,要复制它很简单:
function easyCopy(p) { var c = {}; for (var i in p) { c[i] = p[i]; } c.uber = p; return c; }
当要复制的对象中存在某一个属性的值类型是对象或者数组时,那么这样做子对象中该属性得到的只是一个内存地址,而不是真正复制。因此存在父对象被篡改的可能。
所谓"深拷贝",就是能够实现真正意义上的数组和对象的拷贝:
function deepCopy(p, c) { var c = c || {}; for (var i in p) { if(! p.hasOwnProperty(i)){ continue; } if (typeof p[i] === 'object') { c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i], c[i]); } else { c[i] = p[i]; } } return c; } Parent = {name: 'foo', birthPlaces: ['北京','上海','香港']} var Child = deepCopy(Parent);
应用场景:非构造函数继承的一种方式
相关文章推荐
- js保留小数
- js各类正则表达式(中文、字母、数字、全角)
- JavaScript 函数replace揭秘
- JavaScript 正则表达式上——基本语法
- js数组去重的4个方法及ts数组去重
- HTML文件中引入js文件路径
- JS触发a标签的跳转事件
- JS 实现一次下载多个文件
- EXTJS4.0.7开发积累(9)
- 《JavaScript高级程序设计》笔记系列2-- 基本概念1
- a标签点击一次后,就不能再点击了,同时还把它的颜色变成灰色?用js实现
- a标签中有点击事件禁止跳转
- EXTJS4.0.7开发积累(8)
- javascript基础: 封装-Base库
- EXTJS4.0.7开发积累(7)
- JavaScript:DOM
- EXTJS4.0.7开发积累(6)
- DOM解析在java和javascript不同的写法
- 《高性能JavaScript》学习笔记——日更中
- EXTJS4.0.7开发积累(5)