1.Object.assign(target,…sources)
因?yàn)?Object.assign()拷貝的是屬性值伊佃。假如源對象的屬性值是一個(gè)指向?qū)ο蟮囊弥枇澹仓豢截惸莻€(gè)引用值。
eg:
var obj1 = { a: 0 , b: { c: 0}};
var obj2 = Object.assign({}, obj1);//將obj的可枚舉的屬性值復(fù)制到{}中
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
obj1.a = 1;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
obj2.a = 2;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
obj2.b.c = 3;//會(huì)影響到源對象惠桃,因?yàn)榇藢傩灾凳且粋€(gè)指向?qū)ο蟮囊?console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
2.當(dāng)源對象的屬性值是一個(gè)指向?qū)ο蟮囊脮r(shí)换途,應(yīng)用深度復(fù)制
// Deep Clone
var obj1 = { a: 0 , b: { c: 0}};
var obj3 = JSON.parse(JSON.stringify(obj1));//先將obj轉(zhuǎn)換為JSON字符串,然后再轉(zhuǎn)回對象
obj1.a = 4;
obj1.b.c = 4;
console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}