改进版通过Json对象实现深复制的方法


Posted in Javascript onOctober 24, 2012

之前看到博客的关于Json对象的深复制方法,即

var obj = { 
sayName: function() { 
alert(this.name); 
}, 
name:'静水渊' 
};var cloneObj=JSON.parse(JSON.stringify(obj));cloneObj.sayName();

但这种方式,不能复制属性值是函数的属性,因此改进了方法,以下是具体代码:
var obj = { 
sayName: function() { 
alert(this.name); 
}, 
name:'静水渊' 
}; 
function clone(){ 
var str,newObj; 
str= JSON.stringify(obj, function(key, value) { 
return (typeof value == 'function' ? value.toString().replace(/^function(.*)/g, "jsonFunction$1") : value); 
}); 
newObj = JSON.parse(str, function (key, value) { 
if (/^jsonFunction(.*)/.test(value)) { 
var strFun = '('+value.replace(/^jsonFunction(.*)/, "function$1")+')'; 
value = eval(strFun); 
} 
return value; 
}); 
return newObj; 
} 
var cloneObj=clone(obj); 
cloneObj.sayName();

因为还没有全面测试过,欢迎拍砖!
Javascript 相关文章推荐
JavaScript调试工具汇总
Dec 23 Javascript
简单对比分析JavaScript中的apply,call与this的使用
Dec 04 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
Jun 14 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
video.js 实现视频只能后退不能快进的思路详解
Aug 09 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
Aug 10 Javascript
vue-router传递参数的几种方式实例详解
Nov 13 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 Javascript
JavaScript canvas实现雪花随机动态飘落
Feb 08 Javascript
JavaScript中使用Spread运算符的八种方法总结
Jun 18 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
Oct 24 #Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
Oct 24 #Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 #Javascript
javaScript 删除字符串空格多种方法小结
Oct 24 #Javascript
javascript中input中readonly和disabled区别介绍
Oct 23 #Javascript
关于js new Date() 出现NaN 的分析
Oct 23 #Javascript
js Dialog 实践分享
Oct 22 #Javascript
You might like
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
详解JS模块导入导出
2017/12/20 Javascript
vue如何判断dom的class
2018/04/26 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
浅谈对yield的初步理解
2017/05/29 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
高中军训广播稿
2014/01/14 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
教师考核材料
2014/05/21 职场文书
文员求职信
2014/07/15 职场文书
房屋产权证明书
2015/06/19 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
小学音乐课教学反思
2016/02/18 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
Python  lambda匿名函数和三元运算符
2022/04/19 Python