改进版通过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知识点之"字面量和对应类型"说明介绍
Apr 23 Javascript
jQuery 选择器详解
Jan 19 Javascript
javascript创建cookie、读取cookie
Mar 31 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
Aug 05 Javascript
vue.js学习之递归组件
Dec 13 Javascript
js实现键盘自动打字效果
Dec 23 Javascript
javascript实现页面滚屏效果
Jan 17 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
Vue2.0用户权限控制解决方案
Nov 29 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 Javascript
react-native 圆弧拖动进度条实现的示例代码
Apr 12 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
dedecms模版制作使用方法
2007/04/03 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
C#如何进行LDAP用户校验
2012/11/21 面试题
电气专业应届生求职信
2013/11/01 职场文书
班会关于环保演讲稿
2013/12/29 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js