`
zhouyrt
  • 浏览: 1163806 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

克隆JS对象的三个实用方法

阅读更多

方法一

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;
}
 

 

 

 

3
1
分享到:
评论
2 楼 zhouyrt 2010-12-17  
谢谢 libmw 提供了一个很巧妙的方式。
1 楼 libmw 2010-12-17  
Object.prototype.deepClone=function(){
    function cloneObj(){}
	cloneObj.prototype=this;
    var obj=new cloneObj();
	for(var o in obj){if(typeof(obj[o])=="object")obj[o]=obj[o].deepClone();}
	return obj;
}

我这个会有什么问题呢?

相关推荐

    prototypeModel.rar

    在JavaScript中,可以使用`Object.create()`或`Object.assign()`来实现原型继承和浅复制,而深复制通常需要借助第三方库如lodash的`_.cloneDeep()`方法。 总的来说,原型模式是一种实用的设计模式,通过复制已有...

    class2context是一款非常实用的纯JavaScript右键上下文菜单插件

    2. **初始化插件**:在JavaScript中,通过调用`class2context.init()`方法初始化插件,并传入配置对象。 ```javascript var options = { contextClass: 'contextmenu', // 指定触发菜单的类名 menuItems: [ // ...

    instagram:instagram克隆

    总的来说,Instagram克隆项目是一个全面的实践机会,涵盖了JavaScript及其生态系统中的许多核心概念和技术。通过这个项目,开发者不仅可以提高编程技能,还能了解社交应用背后的架构和工作原理。无论是对于初学者...

    javascript经验

    ### JavaScript 开发过程中的实用技巧与经验分享 #### 一、`createElement(element)` `createElement(element)` 是一个非常基础但重要的方法,它用于创建一个新的 HTML 元素节点。该方法接收一个参数,即想要创建...

    jQuery插入节点1

    jQuery 提供了 `wrap()`、`wrapAll()` 和 `wrapInner()` 三个方法来包裹节点。 * `wrap()` 方法将指定节点用其他标记包裹起来,该方法对于需要在文档中插入额外的结构化标记非常有用。 * `wrapAll()` 方法将所有...

    underscore-1.4.3.zip

    2. **对象操作**:对于JavaScript对象,Underscore.js同样提供了丰富的操作手段,如`keys`(获取对象的所有键)、`values`(获取对象的所有值)、`pairs`(将对象转化为键值对数组)等。 3. **函数工具**:...

    廖雪峰:Git-Python-JS 教程

    廖老师的教程通过整合Git、JavaScript和Python三个领域的知识点,让编程新手能够迅速从零基础到独立开发,无论是在前端还是后端,都能具备一定的项目开发能力。同时,教程深入浅出,注重实战,结合真实应用场景,让...

    JavaScript and jQuery

    - **结构/表现/行为**:将网页分为三个层次——结构(HTML)、表现(CSS)和行为(JavaScript),这种划分有助于实现网页的模块化开发。 - **DOM/BOM**:文档对象模型(DOM)和浏览器对象模型(BOM)为JavaScript...

    前端开源库-protoblast

    总结,Protoblast作为一款前端开源库,通过增强JavaScript对象的功能、提供事件系统、类系统以及丰富的实用工具,极大地提升了前端开发的效率和代码的可维护性。无论是小型项目还是大型应用,都可以考虑将其纳入开发...

    程序天下:JavaScript实例自学手册

    22.8 拖拽任意对象 22.9 避免打开无效页面 22.10 用JavaScript调用Google AdSense 22.11 Ajax效果:可拖拽的表格 22.12 JavaScript调用Web Service 22.13 用JavaScript实现编码解码 22.14 创建带属性...

    git http js

    标题中的“git http js”揭示了我们关注的三个主要知识点:Git、HTTP协议以及JavaScript编程语言。接下来,我将详细地介绍这三个领域的核心概念、重要性以及它们在实际开发中的应用。 **Git** 是一个分布式版本控制...

    js 文字无限,有间断往上滚动

    `scrollup`函数接收三个参数:滚动的元素对象、目标滚动距离、当前滚动距离。此函数递归地调整第一个子元素的`marginTop`属性,当文本滚动至顶端时,会将第一个子元素复制并移动到最后,然后重置其`marginTop`,形成...

    《程序天下:JavaScript实例自学手册》光盘源码

    14.24 实用计算器 14.25 前面补0的方法 第15章 图形、图像的特效 15.1 图片变形效果 15.2 图像的翻转效果 15.3 图像的模糊效果 15.4 图像的水印效果 15.5 图形淡出淡隐 15.6 图像的渐隐播放效果 15.7 文字环绕图片 ...

    DWR (api)帮助文档

    1. `DWRUtil` 是DWR提供的一个实用工具类,包含了多种用于操作DOM元素和数据的方法。例如: - `DWRUtil.selectRange("selectRangeBasic", 5, 15)`:此方法可以选中指定文本框中的特定字符范围,这里是从第五个字符...

    动量克隆

    总的来说,动量克隆是一款集成了多种功能的JavaScript应用,它充分利用了JavaScript的特性来提供一个全方位的个人生产力工具。其设计考虑了用户体验和实用性,结合了现代Web技术,实现了高效的时间管理和生活助手...

    ppk on Javascript (pdf)

    本书不同于其他JavaScript书籍的地方在于它采用了八个实际工作中的脚本案例进行讲解,确保了每个案例都有其实用价值,并能够提升网页的可用性。 #### 二、上下文与背景 1. **CSS革命**:随着CSS的出现和发展,网页...

    JavaScript JMap类定义与使用方法示例

    总的来说,JMap类是JavaScript中实现键值对存储的一个实用工具,它提供了一种组织和操作数据的方式,特别是在没有原生Map支持的环境下。通过学习和使用JMap,可以加深对JavaScript面向对象编程的理解,并提升代码的...

    words.js:JS数组中的一大堆英文单词

    在这个例子中,`words`就是一个数组,包含了三个字符串元素。 数组有很多内置的方法,可以帮助我们进行各种操作: 1. `push()`: 在数组末尾添加元素。 2. `pop()`: 移除并返回数组的最后一个元素。 3. `shift()`: ...

    js-todo-clone

    "js-todo-clone"项目是一个使用JavaScript语言实现的简易待办事项应用的克隆版。这个项目旨在帮助初学者了解和实践JavaScript的基础知识,以及前端开发的基本流程。通过分析和学习这个项目,我们可以深入理解...

Global site tag (gtag.js) - Google Analytics