JavaScript 深度克隆
2015-09-22 22:37
686 查看
需求:
*使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝
*被复制的对象类型会被限制为数字、字符串、布尔、日期、数组、Object对象。不会包含函数、正则对象等
自己归纳了两种实现方法,惭愧的是自己不能通过自己的努力来解决这个问题,现记录如下:
第一种方法显得挺简单直接,有一定的基础js能力便能理解,代码如下:
以构造方法实现是为方法二:
真正需求所说的实现方法如下,用递归来完成:
*使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝
*被复制的对象类型会被限制为数字、字符串、布尔、日期、数组、Object对象。不会包含函数、正则对象等
什么是深度克隆,通俗的说:就是在给你一个对象的前提下,你创建一个和这个对象一模一样的对象,所有属性和值都相等,并且修改新对象的属性不会影响旧的对象。
自己归纳了两种实现方法,惭愧的是自己不能通过自己的努力来解决这个问题,现记录如下:
第一种方法显得挺简单直接,有一定的基础js能力便能理解,代码如下:
function clone(obj){ var o; switch(typeof obj){ case 'undefined': break; case 'string' : o = obj + '';break; case 'number' : o = obj - 0;break; case 'boolean' : o = obj;break; case 'object' : if(obj === null){ o = null; }else{ if(obj instanceof Array){ o = []; for(var i = 0, len = obj.length; i < len; i++){ o.push(clone(obj[i])); } }else{ o = {}; for(var k in obj){ o[k] = clone(obj[k]); } } } break; default: o = obj;break; } return o; }
以构造方法实现是为方法二:
function clone2(obj){ var o, obj; if (obj.constructor == Object){ o = new obj.constructor(); }else{ o = new obj.constructor(obj.valueOf()); } for(var key in obj){ if ( o[key] != obj[key] ){ if ( typeof(obj[key]) == 'object' ){ o[key] = clone2(obj[key]); }else{ o[key] = obj[key]; } } } o.toString = obj.toString; o.valueOf = obj.valueOf; return o; }
真正需求所说的实现方法如下,用递归来完成:
function clone3(obj){ function Clone(){} Clone.prototype = obj; var o = new Clone(); for(var a in o){ if(typeof o[a] == "object") { o[a] = clone3(o[a]); } } return o; }
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象