Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标象。
(这么官方,一定看不懂了吧,我们往下面看。)
Object.assign()
语法
Object.assign (target, source1,source2, source3, …);
参数
target目标对象
target目标对象
返回值
目标对象。
方法
1、Object.assign()第一个参数是目标对象,后面的都是源对象。
const target = {a: 1};
const source1 = {b: 2};
const source2 = {c: 3};
Object.assign(target, source1, source2);
console.log(target)// {a:1, b:2, c:3}
2、如果发生的值是一个对象,Object.assign的处理方法是直接替换,而不是添加。t
console.log(Object.assign(小陈同学))
//String {"小陈同学"} object
3、如果源对像与目标对象有相同的属性名,或源对象中有相同的属性名,后面的会覆盖前边的值 。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);// Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);// Object { a: 1, b: 4, c: 5 }
4、null和undefined 不能作为参数传入,因为null和undefined 不能转成Object
| 如果undefined和null不在首参数,就不会报错
const target = {a: 1};
console.log(Object.is(Object.assign( target, undefined), target)); //true
console.log(Object.assign( target, null) === target); //true
用处
1、合并多个对象
const merge = (target, ...sources) => Object.assign(target, ...sources);
2、克隆对象
function clone(a) {
return Object.assign({}, a);
}
3、为对象添加方法
Object.assign(SomeClass.prototype, {
someMethod(a, b) {
},
anotherMethod() {
}
});
4、为对象添加属性
class Point {
constructor (a,b) {
Object.assign(this, {a,b})
}
}