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 } }
}

//克隆生成的对象是独立的,克隆对象和源对象互不影响

 

posted @ 2016-12-19 14:49  向着太阳生  阅读(6893)  评论(0编辑  收藏  举报