深拷贝

2021-03-30  本文已影响0人  明天_8c66

<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>deepCopy</title>

  </head>

  <body>

    <script>

      var obj = {

        id: 1,

        name: "贺贺呀",

        msg: {

          age: 18,

          other: {

            time: 01,

          },

        },

      };

      var o = {};

      // 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用(地址)

      //   封装函数  利用了递归的思想

      function deepCopy(newObj, oldObj) {

        for (var k in oldObj) {

          // 判断我们的属性值属于哪种数据类型

          //   1. 获取属性值 oldObj[k]

          // var item = oldObj[k];

      // 这里要先判断数组再判断对象,因为数组也是对象,如果先判断对象就会把数组的判断覆盖了

          if (oldObj[k] instanceof Array) {

            //  2. 判断这个值是否是数组

            newObj[k] = [];

            deepCopy(newObj[k], oldObj[k]);

          } else if (oldObj[k] instanceof Object) {

            //  3. 判断这个值是否是对象

            newObj[k] = {};

            deepCopy(newObj[k], oldObj[k]);

          } else {

            //  4. 属于简单数据类型

            newObj[k] = oldObj[k];

          }

        }

      }

      deepCopy(o, obj);

      console.log(o);

      o.msg.other.time = 22;

      console.log(obj);

    </script>

  </body>

</html>

上一篇下一篇

猜你喜欢

热点阅读