美文网首页
js浅拷贝与深拷贝

js浅拷贝与深拷贝

作者: MenChem | 来源:发表于2018-04-10 10:40 被阅读9次
    // 浅拷贝实现
    function shadowCopy(target, source){ 
        if( !source || typeof source !== 'object'){
            return;
        }
        // 这个方法有点小trick,target一定得事先定义好,不然就不能改变实参了。
           // 具体原因解释可以看参考资料中 JS是值传递还是引用传递
        if( !target || typeof target !== 'object'){
            return;
        }  
        // 这边最好区别一下对象和数组的复制
        for(var key in source){
            if(source.hasOwnProperty(key)){
                target[key] = source[key];
            }
        }
    }
    
    // 深拷贝的实现
    function deepClone(obj){
        let objClone = Array.isArray(obj)?[]:{};
        if(obj && typeof obj==="object"){
            for(key in obj){
                if(obj.hasOwnProperty(key)){
                    //判断ojb子元素是否为对象,如果是,递归复制
                    if(obj[key]&&typeof obj[key] ==="object"){
                        objClone[key] = deepClone(obj[key]);
                    }else{
                        //如果不是,简单复制
                        objClone[key] = obj[key];
                    }
                }
            }
        }
        return objClone;
    }    
    let a=[1,2,3,4],
        b=deepClone(a);
    a[0]=2;
    console.log(a,b);
    
    

    相关文章

      网友评论

          本文标题:js浅拷贝与深拷贝

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