zoukankan      html  css  js  c++  java
  • Object.assign方法复制或合并对象

    Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象

    1 var obj = { a: 1 };
    2 var copy = Object.assign({}, obj);
    3 console.log(copy); // { a: 1 }

    合并对象

    1 var o1 = { a: 1 };
    2 var o2 = { b: 2 };
    3 var o3 = { c: 3 };
    4 var obj = Object.assign(o1, o2, o3);
    5 console.log(obj); // { a: 1, b: 2, c: 3 }
    6 console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变

    深度拷贝

    假如需要深度拷贝的话,仍旧需要使用别的而不是本方法。因为 Object.assign() 拷贝的是在 source 里是对象的属性的引用而不是对象本身

    function test() {
      let a = { b: {c:4} , d: { e: {f:1}} }
      let g = Object.assign({},a)
      let h = JSON.parse(JSON.stringify(a)); //克隆a对象
      console.log(g.d) // { e: { f: 1 } }
      g.d.e = 32
      console.log('g.d.e set to 32.') // g.d.e set to 32.
      console.log(g) // { b: { c: 4 }, d: { e: 32 } }
      console.log(a) // { b: { c: 4 }, d: { e: 32 } }
      console.log(h) // { b: { c: 4 }, d: { e: { f: 1 } } }
      h.d.e = 54
      console.log('h.d.e set to 54.') // h.d.e set to 54.
      console.log(g) // { b: { c: 4 }, d: { e: 32 } }
      console.log(a) // { b: { c: 4 }, d: { e: 32 } }
      console.log(h) // { b: { c: 4 }, d: { e: 54 } }
    }
    
    //克隆生成的对象是独立的,克隆对象和源对象互不影响
  • 相关阅读:
    处理在finally中出现的异常(Java)
    【转】alt和title属性的区别及应用
    IE6下兼容CSS属性minheight的解决办法
    javascript中判断字符串是否以指定字符串开始或结尾
    IE6兼容改造中的反思
    字符操作函数
    魔术公式
    抽象类和纯虚函数
    悬空指针
    重载
  • 原文地址:https://www.cnblogs.com/toward-the-sun/p/6197482.html
Copyright © 2011-2022 走看看