改进版通过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实现div的显示和隐藏的小例子
Jun 25 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
Jun 22 Javascript
jQuery实现鼠标滑过点击事件音效试听
Aug 31 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
每日十条JavaScript经验技巧(二)
Jun 23 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
Aug 02 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
JavaScript实现点击切换验证码及校验
Jan 10 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
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
javascript数组详解
2014/10/22 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
react 父子组件之间通讯props
2018/09/08 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
django 外键创建注意事项说明
2020/05/20 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
手机银行营销方案
2014/03/14 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
施工安全保证书
2015/05/09 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
MySQL常见优化方案汇总
2022/01/18 MySQL