美文网首页
深拷贝,浅拷贝

深拷贝,浅拷贝

作者: 小鹿_xiaolu | 来源:发表于2022-04-30 21:55 被阅读0次

    1. 网上有很多关于深拷贝和浅拷贝的理论,这里就不细讲了,下面说一下深拷贝实现方法

    ```

    function deepCopy(data) {

            var newdata = Array.isArray(data) ? [] : {}

            if (data && typeof data === "object") {

                for (var k in data) {

                    // 判断data的k子元素是不是对象。如果是递归,如果不是,直接复制

                    if (data.hasOwnProperty(k)) {

                        if (data[k] && typeof data[k] === "object") {

                          // 如果对象里面的属性还是对象则递归调用

                            newdata[k] = deepCopy(data[k]);

                        } else {

                            newdata[k] = data[k];

                        }

                    }

                }

            }

            return newdata

        }

    ```


      var newdata = Array.isArray(data) ? [] : {}

      newdata[k] = data[k];

    实现深拷贝主要看这两行,可以看到deepCopy函数里面新建了一个变量newdata,然后做了类型判断,如果是数组类型则定义为空数组,如果不是,则定义为空对象类型。并且把data[k] 赋值给了newdata[k]。这里data,是指传参,是指要拷贝的对象,所以data[k]是指对象里面的具体属性,所以newdata[k]=data[k]就是把拷贝对象的每个属性都一一赋值给新变量newdata,然后最后再retrun newdata;

    所以深拷贝的中心思想则是,把A对象直接赋值给B对象,因为对象共用一个栈,所以修改b会影响会产生浅拷贝影响,所以这时创建一个第三方变量C,把对象A的属性都一一赋值给C,然后C再赋值B,所以A 和B 没有直接关系了,这时B再去修改其属性值也不会对A造成影响了

    示例:

    相关文章

      网友评论

          本文标题:深拷贝,浅拷贝

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