15.深浅拷贝

浅拷贝:就是当被拷贝的对象的某个属性值为引用类型时,拷贝的对象会将被拷贝的对象的这个属性的引用的地址拷贝过来,这样当引用值里面的值变化时,无论是拷贝还是被拷贝的对象,其属性都会发生变化.

深拷贝:就是拷贝的对象将被拷贝的对象的引用的地址里面的值真正的拷贝过来,无论其中谁发生改变另外一个的值都不会发生改变.

也就是说,深浅拷贝的区别在于其属性值不为基本类型时,拷贝的地址的引用问题,浅拷贝时地址引用指向同一处,深拷贝时地址引用不是指向同一处.


function clone(target , origin){

    var target = target || {};

    for( var prop in origin){

        target[prop]  =  origin[prop];

    }

    return target;

}


1.判断是不是原始值  typeof()   object 当然null要做特殊处理

2.判断是数组还是对象,那如果是函数呢?  instanceof   toString   constructor

3.建立相应的数组或对象

4.递归

function deepClone(target , origin){

    var target = target || {},

          toStr = Obejct.prototype.toString,

         arrStr = "Object Array";

    for(var prop in origin){

        if(origin.hasOwnProperty(prop)){

                if(typeof(origin[prop])  == "Object"  &&  origin[prop] !== null){

                        target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {};

                        deepClone(target[prop] , origin[prop]);   //递归判断其属性是否为引用类型

                }else{

                        target[prop] = origin[prop];

                }

        }

    }

    return target;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容