[js] Javascript中的一种深复制实现
来源:互联网 发布:mcs51单片机编程环境 编辑:程序博客网 时间:2024/06/16 07:28
本文将给大家详细介绍一种javascript中的深复制实现。
本文转自我的个人博客: http://jerryzou.com
在javascript中,所有的object变量之间的赋值都是传地址的,可能有同学会问哪些是object对象。举例子来说明可能会比较好:
typeof(true) //"boolean"typeof(1) //"number"typeof("1") //"string"typeof({}) //"object"typeof([]) //"object"typeof(null) //"object"typeof(function(){}) //"function"
所以其实我们深复制主要需要处理的对象就是object对象,非object对象只要直接正常的赋值就好。我实现js深复制的思路就是:
- 遍历所有该对象的属性,
- 如果该属性是"object"则需要特殊处理,
- 如果这个object对象比较特殊,是一个数组,那就创建一个新的数组并深复制数组里的元素
- 如果这个object对象是个非数组对象,那直接再对它递归调用深复制方法即可。
- 如果不是"object",则直接正常复制就行。
下面就是我的实现了:
Object.prototype.DeepCopy = function () { var obj, i; obj = {}; for (attr in this) { if (this.hasOwnProperty(attr)) { if (typeof(this[attr]) === "object") { if (this[attr] === null) { obj[attr] = null; } else if (Object.prototype.toString.call(this[attr]) === '[object Array]') { obj[attr] = []; for (i=0; i<this[attr].length; i++) { obj[attr].push(this[attr][i].DeepCopy()); } } else { obj[attr] = this[attr].DeepCopy(); } } else { obj[attr] = this[attr]; } } } return obj;};
如果浏览器支持ECMAScript 5的话,为了深复制对象属性的所有特性,可以使用
Object.defineProperty(obj, attr, Object.getOwnPropertyDescriptor(this, attr));
来替代
obj[attr] = this[attr];
直接在Object.prototype上实现该方法的好处是,所有对象都会继承该方法。坏处是某些库也会改写Object对象,所以有时会发生冲突。这是需要注意的。具体使用方法如下:
Object.prototype.DeepCopy = function () { ... }var a = { x:1 };var b = a;var c = a.DeepCopy();a.x = 2;b.x = 3;console.log(a.x); //3console.log(b.x); //3console.log(c.x); //1
5 0
- [js] Javascript中的一种深复制实现
- javascript中的深复制
- 实现javascript深复制
- javascript中的浅复制和深复制
- JavaScript中的深复制和浅复制
- javascript中的浅复制与深复制
- js中的深复制和浅复制
- JS中实现深复制
- JavaScript 30 Day -- 13 JS中的引用与复制
- 慎用JavaScript深复制!(js deepClone)
- Javascript中的数组复制
- JavaScript 复制对象【Object.assign方法无法实现深复制】
- 网页中的复制、另存为、运行等JS代码的实现
- js实现点击按钮复制文本框中的内容
- JS实现点击按钮,复制文本框中的的内容
- js实现点击按钮复制文本框中的内容
- javascript实现复制功能
- JavaScript实现复制功能
- 微信公众平台开发教程第19篇-应用实例之人脸检测
- db2 修改字段
- python 抓百度招聘信息,将搜索结果解析下来,用来跟踪招聘趋势数据,免费数据变为有用的东东
- 设计模式之-----------------外观模式
- C++学习笔记(八)----表(list)的实现
- [js] Javascript中的一种深复制实现
- 微信公众平台开发教程第20篇-新手解惑40则
- 微信公众平台开发教程第21篇-“可信网址”白名单
- LeetCode Word Ladder解题报告
- 英雄会(csdn pongo)题解之半质数的个数--2·14情人&元宵节专题
- 浅谈组织执行力修炼
- [js] 如何循序渐进地学习Javascript
- Java注解的入门知识
- 提升Android ListView性能的几个技巧