美文网首页
深复制与浅复制

深复制与浅复制

作者: 嘿喵heyMeow | 来源:发表于2017-02-25 10:06 被阅读0次

浅复制

浅复制就是,直接把一个对象(源对象)的属性复制到另一个对象(目标对象)中,当然,如果当属性中包含引用类型的,复制的也仅仅是引用地址,复制后的两个对象共享同一对象和函数。

var obj = {
    a:1,
    b:function(){
        console.log(this.a);
    },
    c:[10,11,12]
};
function slightCopy(targetO, sourceO){
    for(var k in sourceO){
        if(!targetO[k]){  //当目标对象中有重名的属性则不需要复制,视情况添加
            targetO[k] = sourceO[k]
        }
    }
    return targetO;
}
var o = slightCopy({}, obj);
console.log(o);

深复制

为了解决浅复制的问题,于是有了深复制,可以复制一个一模一样的对象并且不受彼此干扰。

function deepCopy(targetO, sourceO){
    targetO = targetO || {};
    for(var k in sourceO){
        if(typeof sourceO[k] == "object"){
            targetO[k] = Array.isArray(sourceO[k])? []: {};  // 判断是否为数组
            deepCopy(targetO[k], sourceO[k]);
        }else{
            targetO[k] = sourceO[k];
        }
    }
}

但是这个方法里用来Array.isArray,这个方法存在兼容问题,所以在使用的时候最好处理下兼容,这个在我之前的文章提到过处理方法:

if(typeof Array.isArray != "function") {
    Array.isArray = function(obj){
        return Object.prototype.toString.call(obj) == "[object Array]";
    }
}

相关文章

  • 设计模式 - 原型模式

    注意深复制与浅赋值的问题 C#中如果需要实现深复制,必须实现 ICloneable 接口。

  • 深拷贝(复制)与浅拷贝(复制)

    对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,并没有开辟新的栈,也就是复制的结果是两...

  • Java 浅拷贝和深拷贝 拷贝和复制

    Java 复制与拷贝 大纲 浅拷贝和深拷贝 浅拷贝就是复制对象的一个精确副本 ==对于基本数据类型就是复制值,对于...

  • Javascript对象的深浅拷贝

    开门见山,有人叫对象的复制为深复制浅复制,也有人叫深拷贝浅拷贝。其实都是copy。 深拷贝(递归复制,复制所有层级...

  • 浅|深 复制

    浅复制 //只写main函数 //结果是 我们可以看到一旦pointArray1发生了改变pointArray2也...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • JS深浅拷贝

    浅拷贝 浅拷贝的意思就是只复制引用,而未复制真正的值。 深拷贝 深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制...

  • 浅拷贝与深拷贝

    一 、基本概念 1.1 深拷贝 与 浅拷贝 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身...

  • 2018-01-06 关于javascript的深拷贝浅拷贝 思

    目录: 什么是复制? 一个简单的浅复制 一个深复制的例子 普遍的深浅复制的几种实现方法 深拷贝,浅拷贝什么是复制?...

  • python中复制,浅拷贝,深拷贝

    python中包含复制 浅拷贝与深拷贝 1.复制 复制没有拷贝子对象,未开辟新内存空间,也没有产生新object,...

网友评论

      本文标题:深复制与浅复制

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