`

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库"是一个专门用于实现JavaScript对象深拷贝的工具库。这个库采用了递归的方式来处理深拷贝,递归是一种自上而下解决问题的方法,当遇到复杂的数据结构,如嵌套的对象或数组时,递归可以有效地一...

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

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

    js数组的深拷贝

    在JavaScript中,数组的深拷贝是一个常见的需求,它涉及到数据结构的复制,尤其是在处理复杂对象和嵌套数据时。深拷贝与浅拷贝不同,浅拷贝只是复制引用,而深拷贝会创建一个新的对象,包含原始数组的所有元素,并...

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

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

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

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

    js深拷贝与浅拷贝详解以及例子.pdf

    JS 深拷贝与浅拷贝详解以及例子 深拷贝与浅拷贝是 JavaScript 开发中常见的概念,分别对应着不同的拷贝方式。在本文中,我们将详细介绍浅拷贝和深拷贝的概念、特点、实现方法和实例。 一、浅拷贝 浅拷贝只拷贝一...

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

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

    深入剖析javascript中的深拷贝和浅拷贝1

    JavaScript中的深拷贝和浅拷贝是编程面试中常见的概念,尤其在处理对象和数组时至关重要。它们主要涉及的是变量赋值时数据的复制方式。简单来说,浅拷贝是创建了一个新对象,但它的属性仍然是对原对象属性的引用,而...

    浅拷贝深拷贝之jQuery中的$.extend分析

    这篇博客“浅拷贝深拷贝之jQuery中的$.extend分析”深入探讨了`$.extend`在浅拷贝和深拷贝场景下的工作原理,这对于理解JavaScript对象的复制机制至关重要。 浅拷贝是指创建一个新对象,然后将源对象的引用属性复制...

    深入理解JavaScript中的深拷贝与浅拷贝:实现方法与应用场景

    深拷贝和浅拷贝是JavaScript中处理对象和数组复制的两种基本方法。选择使用哪一种取决于具体的需求和场景。浅拷贝适用于简单的数据结构,而深拷贝适用于需要完全独立副本的复杂数据结构。了解它们的工作原理和实现...

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

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

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

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

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

    2. 手写深拷贝函数:可以通过递归遍历对象的每个属性,如果属性是对象,则继续调用深拷贝函数,从而实现深拷贝。这种方法可以处理更复杂的对象结构,但效率较低。 3. 使用第三方库如lodash的`_.cloneDeep()`:这类库...

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

    JavaScript中的对象拷贝是编程中... 总之,理解JavaScript中的浅拷贝和深拷贝非常重要,因为它们直接影响到对象的复制行为和数据的独立性。在实际开发中,选择适当的拷贝策略可以避免意外的副作用,确保程序的正确性。

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

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

    deep-copy-ts:typescriptjavascript的递归深拷贝、克隆和浅拷贝函数

    总结一下,"deep-copy-ts"是一个专门针对typescript和javascript的深拷贝工具,它实现了递归深拷贝和浅拷贝功能,适用于处理复杂的对象和数组结构,同时兼容两种语言。通过使用这个库,开发者可以更轻松地管理对象的...

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

    本篇文章将深入探讨如何基于遍历操作实现JavaScript对象的深拷贝。 首先,我们需要一个函数来确定变量的类型。在提供的代码中,`getType` 函数用于获取传入对象的类型,考虑到了 `typeof` 的特殊情况,如数组和null...

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

    总结来说,`for...in`循环和对象深拷贝是JavaScript中处理对象属性和复制对象的重要手段。理解它们的工作原理,能够帮助开发者更好地管理和操作JavaScript对象,避免因数据共享导致的意外问题。在实际编程中,根据...

    js代码-深拷贝对象

    在JavaScript中,深拷贝和浅拷贝是两种常见的数据复制方法。它们之间的区别和应用场景是编程中的重要知识点。本文将深入探讨JavaScript中的深拷贝,包括它的概念、实现方式以及适用场景。 **深拷贝的概念** 深拷贝...

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

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

Global site tag (gtag.js) - Google Analytics