Object.assign(target,source1,source2,...)
该方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性,不拷贝继承的属性。
Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。
Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
Object.assign可以用来处理数组,但是会把数组视为对象。
Object.assign( {a: 4}, {b: 5, c: 6} )
// {a: 4, b: 5, c: 6}
-------------------------------------------------
1、const object1 = { a: 1, b: 2, c: 3};
2、const object2 = Object.assign({c: 4, d: 5}, object1);
3、console.log(object2.c, object2.d); // 3 5
为什么这里打印出来的是 object2.c=3和object2.d=5 呢?
因为 在第二步的时候, 已经是 {a: 1, b;2, c: 3, d: 5}
后面的属性值,把前面的属性值 覆盖了~
参数:
- target: 目标对象
- sources: 源对象
描述:
如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。
Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。该方法使用源对象的[[Get]]和目标对象的[[Set]],所以它会调用相关 getter 和 setter。
因此,它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()和Object.defineProperty() 。
String类型和Symbol类型的属性都会被拷贝。
在出现错误的情况下,例如,如果属性不可写,会引发TypeError,如果在引发错误之前添加了任何属性,则可以更改target对象。
注意,Object.assign 不会跳过那些值为 [null] 或 [undefined]的源对象。