改进版通过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将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
jQuery给元素添加样式的方法详解
Dec 30 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
Apr 05 Javascript
老生常谈jquery中detach()和remove()的区别
Mar 02 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 Javascript
JS面向对象之多选框实现
Jan 17 Javascript
详解如何使用Node.js实现热重载页面
May 06 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
php5.3 废弃函数小结
2010/05/16 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue3.0 上手体验
2020/09/21 Javascript
深入理解Javascript中的this关键字
2015/03/27 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
连接Python程序与MySQL的教程
2015/04/29 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
使用Python读取大文件的方法
2018/02/11 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python烟花效果的代码实例
2020/02/25 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
英语系本科生求职信
2014/07/15 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
2014年实习生工作总结
2014/11/27 职场文书
优秀高中学生评语
2014/12/30 职场文书
升学宴来宾致辞
2015/07/27 职场文书