語法:
Object.assign(target, ...sources)
參數(shù):
target? ? ? ? 目標(biāo)對(duì)象。
sources? ? ? 源對(duì)象。
返回值:
目標(biāo)對(duì)象
復(fù)制一個(gè)對(duì)象:
var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
深克?。?/p>
? let obj1 = { a: 0 , b: { c: 0}};
? let obj2 = Object.assign({}, obj1);
? 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;
? console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
? console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
? // Deep Clone? JSON.parse(JSON.stringify(obj1));
? obj1 = { a: 0 , b: { c: 0}};
? let obj3 = JSON.parse(JSON.stringify(obj1));
? obj1.a = 4;
? obj1.b.c = 4;
? console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
合并對(duì)象:
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);? // { a: 1, b: 2, c: 3 }? ? //目標(biāo)對(duì)象也會(huì)被改變
合并具有相同屬性的對(duì)象:
var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
屬性會(huì)被后續(xù)參數(shù)具有相同屬性的其他對(duì)象覆蓋
繼承屬性和不可枚舉屬性是不能拷貝的:
var obj = Object.create({foo: 1}, { // foo 是個(gè)繼承屬性。
? ? bar: {
? ? ? ? value: 2? // bar 是個(gè)不可枚舉屬性。
? ? },
? ? baz: {
? ? ? ? value: 3,
? ? ? ? enumerable: true? ? // 對(duì)象的屬性分為可枚舉和不可枚舉之分 是由屬性的enumerable的值決定的
? ? }
});
var copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }