克隆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 相关文章推荐
收集的一些Array及String原型对象的扩展实现代码
Dec 05 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
Nov 05 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
Aug 01 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
常用jQuery选择器总结
Jul 11 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
JS实现给数组对象排序的方法分析
Jun 24 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
社区(php&amp;&amp;mysql)四
2006/10/09 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
python进程与线程小结实例分析
2018/11/11 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
2019/08/03 PHP
php面向对象重点知识分享
2019/09/27 PHP
javascript 面向对象继承
2009/11/26 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Ionic快速安装教程
2016/06/03 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
python学习之编写查询ip程序
2016/02/27 Python
python运行时间的几种方法
2016/06/17 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
面试后的英文感谢信
2014/02/01 职场文书
小学数学课后反思
2014/04/23 职场文书
五一口号
2014/06/19 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
cypress测试本地web应用
2022/06/01 Javascript