JavaScript中如何对一个对象进行深度clone

JavaScript中如何对一个对象进行深度clone


方法1:

function cloneObject(obj){
    		if(!obj || 'object' !== typeof obj){
    			return obj;
    		}

    		var o = obj.constructor === Array ? [] : {}; 
			for(var i in obj){ 
				if(obj.hasOwnProperty(i)){ 
					o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i]; 
				} 
			} 
			return o; 
    	}


这是网上摘抄的代码,实在有一句看不懂

if(obj.hasOwnProperty(i)){ 
					o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i]; 
				} 

这里为何只克隆非原型里面的对象。一个对象的原型属性,该对象也能访问,所以应该连原型也一起克隆。

最后代码为:

  	function cloneObject(obj){
    		if(!obj || 'object' !== typeof obj){
    			return obj;
    		}

    		var o = obj.constructor === Array ? [] : {}; 
			for(var i in obj){ 
				//if(obj.hasOwnProperty(i)){ 
					o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i]; 
				//} 
			} 
			return o; 
    	}



方法2:

var s = JSON.stringify( obj ); 
var o = JSON.parse( s ); 




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值