zoukankan      html  css  js  c++  java
  • 浅拷贝和深拷贝

    原文链接:https://blog.csdn.net/weixin_37719279/article/details/81240658

    浅拷贝

    function simpleClone(initalObj) {
    var obj = {};
    for ( var i in initalObj) {
    obj[i] = initalObj[i];
    }
    return obj;
    }

    var obj = {
    a: "hello",
    b:{
    a: "world",
    b: 21
    },
    c:["Bob", "Tom", "Jenny"],
    d:function() {
    alert("hello world");
    }
    };
    var cloneObj = simpleClone(obj);

    console.log(cloneObj.a);  
    console.log(cloneObj.b);  
    console.log(cloneObj.c);
    console.log(cloneObj.d);

    //更改原对象中的a,b,c,d,看看拷贝过来的对象是否变化
    cloneObj.a = "changed";
    cloneObj.b.a = "changed";
    cloneObj.b.b = 25;
    cloneObj.c = [1, 2, 3];
    cloneObj.d = function() { alert("changed"); };
    console.log(obj.a); //hello
    console.log(obj.b); //{a:"changed",b:25},事实上就是只有对象是拷贝的引用类型
    console.log(obj.c); //['Bob','Tom','Jenny']
    console.log(obj.d); //...alert("hello world")

     浅拷贝就是拷贝了一层,除了对象是拷贝的引用类型,其他都是直接将值传递,有自己的内存空间的;

    ES6中的Object.assign方法,Object.assign是ES6的新函数。Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

    Object.assign() 方法第一级属性深拷贝(新对象的改变不会影响原对象),以后级别属性浅拷贝(会影响原对象);

    深拷贝

    Object.assign() 方法第一级属性深拷贝(新对象的改变不会影响原对象),以后级别属性浅拷贝(会影响原对象);

    直接使用var newObj = Object.create(oldObj),可以达到深拷贝的效果。

  • 相关阅读:
    敏捷开发第五天
    敏捷开发第四天
    系统用户分析模型
    第三天敏捷开发
    第二天敏捷开发
    敏捷开发第一天
    第三周学习总结
    [学习笔记]莫队算法
    【网络流】Modular Production Line
    [学习笔记]set的使用
  • 原文地址:https://www.cnblogs.com/gaoyafeng/p/11985249.html
Copyright © 2011-2022 走看看