对象的深复制和浅复制.


layout: post
title: "对象的浅复制和深复制"
date: 2017-03-28
categories: js


对象的深复制和浅复制.
浅度克隆:原始类型为值传递,对象类型仍为引用传递。
深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中

var a={name:'yy',age:26};
var b=new Object();

深复制
1.将对象下属性的值取出来赋给要复制的对象下的属性

b.name=a.name;
b.age=a.age;
a.name='xx';
console.log(b);//Object { name="yy", age=26}
console.log(a);//Object { name="xx", age=26} 

2.采用递归的方式

function deepClone(obj){
    var result={},
oClass=isClass(obj);isClass判断对象的什么类型   
 for(key in obj){
        var copy=obj[key];
        if(isClass(copy)=="Object"){
            result[key]=arguments.callee(copy);
        }else if(isClass(copy)=="Array"){
            result[key]=arguments.callee(copy);
        }else{
            result[key]=obj[key];
        }
    }
    return result;
}

简化的递归函数

Object.prototype.clone=function(){
 var o=(this.contructor===Array?[]:{});
for(var e in this){
o[e]=typeof this[e]==='object'?this[e].clone():this[e]
}
return o;
}

3.用JSON

     var str1=JSON.stringify(obj1);
    var obj2=JSON.parse(str1);

将对象先转换为字符串,再将字符串转换为数组

浅复制

b=a;
a.name='xx';
console.log(b);//Object { name="xx", age=26}
console.log(a);//Object { name="xx", age=26}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,655评论 0 4
  • 作为一只猫,或许秋去春未来,我便已走,身后的世界如何变化都将在我死亡的时刻定格永恒。这盛世的太平,在猫的眼中或许大...
    睡觉者阅读 2,523评论 0 0
  • 很高兴,能和你在此相遇,我读的书并不多,但我会继续读,就像溪水虽没有大海的波澜壮阔,但从未停止生命的流淌。 一、读...
    兔曹酱阅读 3,025评论 0 3
  • 昨晚做了一个梦,大致是说我之前曾在南通的一所大学就读,然后辍学从新高考,后来才考取了上海的大学.梦中有很多关于南通...
    之蛇阅读 1,850评论 0 1

友情链接更多精彩内容