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; }
  • 相关阅读:
    类的专有方法(__getitem__和__setitem__)
    类的专有方法(__len__)
    demo02
    python之函数用法__str__()
    repr
    类的专有方法(__repr__)
    类的专有方法(__del__)
    类的专有方法(__init__)
    静态方法
    Golang接口简单了解
  • 原文地址:https://www.cnblogs.com/Smiled/p/8317607.html
Copyright © 2011-2022 走看看