美文网首页
对象的深复制和浅复制.

对象的深复制和浅复制.

作者: 雪萌萌萌 | 来源:发表于2017-03-28 22:42 被阅读0次

    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}
    
    

    相关文章

      网友评论

          本文标题:对象的深复制和浅复制.

          本文链接:https://www.haomeiwen.com/subject/rdmsottx.html