`

js对象深拷贝

 
阅读更多

在做一个前台页面你的时候用到了一个自己写的List对象,在进行深拷贝的时候参考了网上的代码:

 

一、

 

 

var util = {
	clone : function(obj) {
		if (typeof (obj) != 'object')
			return obj;

		var re = {};
		if (obj.constructor==Array)
			re = [];

		for ( var i in obj) {
			re[i] = util.clone(obj[i]);
		}

		return re;

	}
};

 

 二、

 

 

//对象和数组的深拷贝 
  
Object.clone = function(sObj){ 
  
        if(typeof sObj !== "object"){ 
  
            return sObj; 
  
        } 
  
        var s = {}; 
  
        if(sObj.constructor == Array){ 
  
            s = []; 
  
        } 
  
        for(var i in sObj){ 
  
            s[i] = Object.clone(sObj[i]); 
  
        } 
  
        return s; 
  
   }

 

 

 

//对象扩展,tObj被扩展对象,sObj扩展对象  
  
   Object.extend = function(tObj,sObj){ 
  
        for(var i in sObj){ 
  
            if(typeof sObj[i] !== "object"){ 
  
                tObj[i] = sObj[i]; 
  
            }else if (sObj[i].constructor == Array){ 
  
                tObj[i] = Object.clone(sObj[i]); 
  
            }else{ 
  
                tObj[i] = tObj[i] || {}; 
  
                Object.extend(tObj[i],sObj[i]); 
  
            } 
  
        } 
  
   } 
 

   测试用例:

var a = {}; 
  
var b = {"a":1, 
  
         "b":{"c":function(t){ 
  
                       alert(t); 
  
                    } 
  
             }, 
  
         "d":{"e":2, 
  
              "f":[1,4,5,7,9] 
  
             } 
  
        }; 
  
Object.extend(a,b);//a获得了b的所有属性 

 三、说明:

我自己定义的list中没有定义constructor,所以执行sObj.constructor == Array会报错,我就修改为:

 

//对象和数组的深拷贝 
  
Object.clone = function(sObj){ 
  
        if(typeof sObj !== "object"){ 
  
            return sObj; 
  
        } 
  
        var s = {}; 
  
        if(sObj.constructor == Array){ 
  
            s = []; 
  
        } 
  
        for(var i in sObj){ 
  
            s[i] = Object.clone(sObj[i]); 
  
        } 
  
        return s; 
  
   }  
 

 

原文链接:http://www.footya.com/?action=show&id=123

0
0
分享到:
评论

相关推荐

    深拷贝.js(考虑最全的深拷贝函数)

    js考虑最完善的深拷贝函数,可以深拷贝引用对象和基本对象

    多维数组和对象-深去重和深拷贝.js

    对多维数组,对象,进行去重,相同的值只保留一个,常见的new Set()和filter,只能去重一维数组,并不能进行深层的去重,逻辑:判断是否为对象,为对象判断是否为数组或是真的对象,递归一直筛选为值,判断首次...

    js对象浅拷贝和深拷贝详解

    本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象。 下面这个函数,就是在做拷贝: var Chinese = {  nation:'中国' } var ...

    最专业的深拷贝JS库

    通过递归方式实现的深拷贝,支持对象和数组的深拷贝,其他类型数据会浅拷贝;支持父子元素循环引用

    【JavaScript源代码】详解JS变量存储深拷贝和浅拷贝.docx

     目录 变量类型与存储空间栈内存和堆内存基本数据类型引用类型图解存储空间引用类型的赋值深拷贝和浅拷贝深拷贝浅拷贝对象的赋值三者对比浅拷贝的常用的五种方法Object.assign()扩展运算符Array.prototype.slice...

    tools_深拷贝_

    一个轻量级的javascript对象深拷贝工具。

    javascript中数组深拷贝途径及对象数组深拷贝

    javascript中数组深拷贝途径及对象数组深拷贝 什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用“=”来直接把一个数组赋值给一个变量,如: var a=[1,2,3]; var b=a; console.log(b); ...

    JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)实例详解

    本文实例讲述了JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)。分享给大家供大家参考,具体如下: 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。  浅拷贝 只是拷贝了基本类型的数据,而引用类型...

    javascript二维数组和对象的深拷贝与浅拷贝实例分析

    本文实例讲述了javascript二维数组和对象的深拷贝与浅拷贝。分享给大家供大家参考,具体如下: 这篇文章主要为大家详细介绍了js实现数组和对象的深浅拷贝, 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新...

    JavaScript对象拷贝与Object.assign用法实例分析

    本文实例讲述了JavaScript对象拷贝与Object.assign用法。分享给大家供大家参考,具体如下: 深拷贝与浅拷贝 在 JavaScript 中,对于基本数据类型(undefined、null、boolean、number、string)来说,在变量中存储的...

    JS 数组和对象的深拷贝操作示例

    主要介绍了JS 数组和对象的深拷贝操作,结合实例形式分析了JS 数组和对象的深拷贝基本原理与操作技巧,需要的朋友可以参考下

    JavaScript深拷贝和浅拷贝概念与用法实例分析

    本文实例讲述了JavaScript深拷贝和浅拷贝概念与用法。分享给大家供大家参考,具体如下: js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础...

    JavaScript对象的浅拷贝与深拷贝实例分析

    本文实例讲述了JavaScript对象的浅拷贝和深拷贝。分享给大家供大家参考,具体如下: 1、浅拷贝 仅仅复制对象的引用,而不是对象本身。 var person = { name: 'Alice', friends: ['Bruce', 'Cindy'] } var student...

    js代码-JS练习 for...in 与 对象深拷贝

    js代码-JS练习 for...in 与 对象深拷贝

    JavaScript基于遍历操作实现对象深拷贝功能示例

    主要介绍了JavaScript基于遍历操作实现对象深拷贝功能,涉及javascript元素遍历与属性操作相关实现技巧,需要的朋友可以参考下

    JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析

    主要介绍了JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能,结合实例形式分析了JSON.parse()与JSON.stringify()方法实现深拷贝的相关实现技巧与操作注意事项,需要的朋友可以参考下

    js代码-深拷贝对象

    js代码-深拷贝对象

    JavaScript 中对象的深拷贝

    对象的深拷贝与浅拷贝的区别如下: 浅拷贝:仅仅复制对象的引用,而不是对象本身; 深拷贝:把复制的对象所引用的全部对象都复制一遍。 一. 浅拷贝的实现 浅拷贝的实现方法比较简单,只要使用是简单的复制语句即可。...

    【JavaScript源代码】JavaScript深拷贝的一些踩坑记录.docx

    JavaScript深拷贝的一些踩坑记录  之前去一家公司面试的时候,面试官问了我一个问题,说:"如何才能深拷贝一个对象"。当时我心里有些窃喜,这么简单的问题还用想吗?于是脱口而出:"平时常用的有两种办法,第一种用...

Global site tag (gtag.js) - Google Analytics