js 对象克隆

看栗子:

let  obj = {

obj_pro_1:'1',

obj_pro_2:2

}

let obj2 = obj;


obj2.obj_pro_2=4;

console.log(obj.obj_pro_2);

//4,

此种方式并不是复制,而是把对象 obj 的引用给了obj2,两个对象同时只想一个堆对象,操作一个对象,

会影响另一个对象,如若想复制一个对象,需将 source 对象中的属性复制给target 对象,js中常用对象

例如Date,Array以及普通对象Object,一个复杂的数据结构中往往会至少包含Array属性或者Date属性

Date和Array对象处理方式与普通Object对象方式不同,上代码:

var cloneObj=function(obj){

//对象判空

	if (null == obj || "object" != typeof obj) return obj;
	//处理Date类型数据
	if (obj instanceof Date) {
 		var copy = new Date();
  		copy.setTime(obj.getTime());
  		return copy;
	}
	//处理数组类型数据
	if (obj instanceof Array) {
  		var copy = [];
  		for (var i = 0,len = obj.length; i < len; ++i) {
    			copy[i] = cloneObj(obj[i]);
  		}
  		return copy;
	}
	//处理Object
	if (obj instanceof Object) {
  		var copy = {};
  		for (var attr in obj) {
    			if (obj.hasOwnProperty(attr)) 
			copy[attr] = cloneObj(obj[attr]);//递归调用,处理多级对象
  		}
  		return copy;
	}
}
 
例子:
var date = new Date();
var obj = {1:1,2:[1,2,3],3:date};
var obj2 = obj;
var target = cloneObj(obj);
console.log(JSON.stringify(target));
console.log(JSON.stringify(obj));
console.log(target===obj);
console.log(obj===obj2);
//结果:
{"1":1,"2":[1,2,3],"3":"2017-09-25T02:55:09.798Z"}
{"1":1,"2":[1,2,3],"3":"2017-09-25T02:55:09.798Z"}
false //内存中两块不同的堆对象
true  //引用指向同一个堆对象
 
 
 
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值