克隆javascript对象的三个方法小结


Posted in Javascript onJanuary 12, 2011

方法一

function clone(obj){ 
var o; 
switch(typeof obj){ 
case 'undefined': break; 
case 'string' : o = obj + '';break; 
case 'number' : o = obj - 0;break; 
case 'boolean' : o = obj;break; 
case 'object' : 
if(obj === null){ 
o = null; 
}else{ 
if(obj instanceof Array){ 
o = []; 
for(var i = 0, len = obj.length; i < len; i++){ 
o.push(clone(obj[i])); 
} 
}else{ 
o = {}; 
for(var k in obj){ 
o[k] = clone(obj[k]); 
} 
} 
} 
break; 
default: 
o = obj;break; 
} 
return o; 
}

方法二
function clone2(obj){ 
var o, obj; 
if (obj.constructor == Object){ 
o = new obj.constructor(); 
}else{ 
o = new obj.constructor(obj.valueOf()); 
} 
for(var key in obj){ 
if ( o[key] != obj[key] ){ 
if ( typeof(obj[key]) == 'object' ){ 
o[key] = clone2(obj[key]); 
}else{ 
o[key] = obj[key]; 
} 
} 
} 
o.toString = obj.toString; 
o.valueOf = obj.valueOf; 
return o; 
}

方法三
function clone3(obj){ 
function Clone(){} 
Clone.prototype = obj; 
var o = new Clone(); 
for(var a in o){ 
if(typeof o[a] == "object") { 
o[a] = clone3(o[a]); 
} 
} 
return o; 
}
Javascript 相关文章推荐
JQuery从头学起第二讲
Jul 04 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
jQuery使用fadein方法实现渐出效果实例
Mar 27 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
一个仿微博登陆邮箱提示框js开发案例
Jul 28 Javascript
详解vue事件对象、冒泡、阻止默认行为
Mar 20 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
AngularJS 打开新的标签页实现代码
Sep 07 Javascript
JavaScript闭包相关知识解析
Oct 19 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
区分vue-router的hash和history模式
Oct 03 Javascript
JavaScript中两种链式调用实现代码
Jan 12 #Javascript
Chrome中JSON.parse的特殊实现
Jan 12 #Javascript
js中将字符串转换成json的三种方式
Jan 12 #Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
Jan 12 #Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 #Javascript
jquery EasyUI的formatter格式化函数代码
Jan 12 #Javascript
Script的加载方法小结
Jan 12 #Javascript
You might like
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
JS面向对象编程详解
2016/03/06 Javascript
理解javascript对象继承
2016/04/17 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
使用PYTHON接收多播数据的代码
2012/03/01 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python制作数据导入导出工具
2015/07/31 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
大学生的创业计划书就该这么写
2014/01/30 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
放假通知格式
2015/04/14 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
初中同学会致辞
2015/08/01 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL