js对象深拷贝

8 篇文章 0 订阅

在做一个前台页面你的时候用到了一个自己写的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值