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

    浅拷贝:

    思路----------把父对象的属性,全部拷贝给子对象,实现继承。

    问题---------如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,不会开辟新栈,不是真正拷贝,因此存在父对象被篡改的可能。

    代码:

    function deepCopy(o){
        var f = {};
        for(i in o){
            f[i] = o[i];
        };
        return f
    }

    深拷贝:

    思路-----------递归调用'浅拷贝',可以解决子对象修改时会污染父对象,此时两个对象指向的不是一个内存地址。

    代码:

    function deepCopy(p,c){  // p 父级对象  c 子集对象 
      var c = c || {};
       for(let i in p){
    // 如果父级对象的其中一个属性是对象
    if(typeof p[i]==='object'){
            c[i]
    = (p[i].constructor===Array)?[]:{}; //通过判断父级对象的属性的constructor的类型,指定子集对象属性的类型
          deepCopy(p[i],c[i])}; //递归调用自身进行深层拷贝
    else{
        // 其他情况直接赋值 c[i]
    = p[i] } } return c; }
  • 相关阅读:
    xlrd doc
    安装Python package
    Python处理Excel(转载)
    OPENSSL简介
    sublime text2教程
    使用SQL 从表中取记录
    SQL基础
    shell脚本之grep的使用方法
    (转载)(收藏)OceanBase深度解析
    (转载)线程池的使用
  • 原文地址:https://www.cnblogs.com/Smiled/p/8317607.html
Copyright © 2011-2022 走看看