改进版通过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 相关文章推荐
Chrome中JSON.parse的特殊实现
Jan 12 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
JS实现仿QQ效果的三级竖向菜单
Sep 25 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
Vue中的基础过渡动画及实现原理解析
Dec 04 Javascript
微信小程序人脸识别功能代码实例
May 07 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
Sep 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
php函数的常用方法及注意之处小结
2011/07/10 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php实现删除空目录的方法
2015/03/16 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python日志logging模块使用方法分析
2019/05/23 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
任命书格式模板
2015/09/22 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS