代码之家  ›  专栏  ›  技术社区  ›  partizanos

使用避免初始对象突变的对象复制对象(避免复制引用)[重复]

  •  0
  • partizanos  · 技术社区  · 9 年前

    我有一个关于引用对象副本的问题

    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    
    /////////// object Create 
    let a = {
      "0": {
    
        "sortPluginSettings": {
          "columnSortType": "numeric",
          "sortingOrder": "noSort"
        }
      }
    }
    let b= Object.create(a)
    console.log("a: ",a)
    console.log("b: ",b)
    
    b["0"].sortPluginSettings.sortingOrder="ascending"
    console.log("NEWa: ",a) // OOPs mutated
    console.log("NEWb: ",b[0])
    
    /////////// object assign
    let c = {
      "0": {
    
        "sortPluginSettings": {
          "columnSortType": "numeric",
          "sortingOrder": "noSort"
        }
      }
    }
    let e= Object.create(c)
    console.log("c: ",c)
    console.log("e: ",e)
    
    e["0"].sortPluginSettings.sortingOrder="ascending"
    console.log("NEWc: ",c) // OOPs mutated
    console.log("NEWe: ",e[0])
    </script>
        <title></title>
    </head>
    <body>
    
    </body>
    </html>
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Behnam    9 年前

    let a = {
      "0": {
        "sortPluginSettings": {
          "columnSortType": "numeric",
          "sortingOrder": "noSort"
        }
      }
    }
    
    var b= JSON.parse(JSON.stringify(a));
    
    b[0].sortPluginSettings.columnSortType=null;
    
    console.log(a);
    console.log(b);