ES6 Object.assign()

来源:互联网 发布:南风知我意琰阙 编辑:程序博客网 时间:2024/05/17 01:11

克隆:

var a = { a: 1, b: 2 }var b = Object.assign({}, a)console.log(b) //Object {a: 1, b: 2}

融合:

var a = { a: 1, b: 2 }var b = { c: 3, d: 4 }var c = { e: 5, f: 6 }var d = Object.assign(a, b, c)console.log(a)  //Object {a: 1, b: 2, c: 3, d: 4, e: 5…}console.log(b)  //Object {c: 3, d: 4}console.log(c)  //Object {e: 5, f: 6}console.log(d)  //Object {a: 1, b: 2, c: 3, d: 4, e: 5…}

融合问题1:

const a = {    student: {      age: 15,      name: 'jack'    }  }const b = {  student: {    age: 20  }}let c = Object.assign(a, b)console.log(c)  //Object  student  age:20

融合问题1:解决方法

const a = {   student: {      age: 15,      name: 'jack'   }}let b = Ojbect.assign({}, a)b.student.age = 20console.log(b)  //Object  student  age:20   name:"jack"

融合问题2:

const a = {  student: {    age: 15,    name: 'jack'  }}const b = Object.assign({}, a)const c = Object.assign({}, a)c.student.age = 20console.log("a::")console.log(a)console.log("b::")console.log(b)console.log("c::")console.log(c)

输出结果

结果发现两个配置变得一模一样,而其实我们并没有去更改b的age,只是改了c的。
这说明一点:在student这一层只是简单的浅拷贝 ,而没有继续深入的深拷贝。