定义
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
使用场景
当需要合并target和source对象,source 对象里面的键和target对象里面有相同键的话,则 覆盖值,若没有相同的键,就添加进去。返回的值是就是target修改后的值。
let target = { a: 1, b: 2 }
let source = { b: 3, d: 4 }
let returnTarget = Object.assign(target, source);
console.log(returnTarget, "returnTarget"); // {a:1,b:3,d:4}
console.log(returnTarget === target); // true
原理
Object.assign()使用的是target 对象的[[get]],和source对象的[[set]],因此使用的时候会调用getter和setter。因此使用Object.assign()是分配属性,而不是复制或者定义新的属性。
如果source是null或者undefined,使用Object.assign()话,不会改变target对象。也不会报错。
注意点:如果合并源包含getter,则可能不适合将新属性合并到原型中。[目前还未碰到这种使用场景,遇到之后再来补充]
要将属性定义(包括其可枚举性)复制到原型中,请改用Object.getOwnPropertyDescriptor()和Object.defineProperty()。