📅  最后修改于: 2023-12-03 14:42:26.112000             🧑  作者: Mango
在Javascript中,Object.assign是一个非常有用的函数,它可以将一个或多个源对象的属性合并到目标对象中,并返回目标对象。这个方法通常用于合并配置对象,创建混合对象以及复制对象。
Object.assign(target, …sources)
target
:合并源的目标对象。
sources
:一个或多个合并源的源对象。
合并后的目标对象。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const result = Object.assign(target, source);
console.log(result); //{ a: 1, b: 4, c: 5 }
Object.assign只能复制源对象自身的可枚举属性到目标对象上。如果一个源对象的属性是一个获取器函数(getter),那么它的返回值不会被复制,只有它的描述符会被复制。
如果目标对象中的属性具有相同的键,则后面的源对象属性将覆盖原来的属性值。
Object.assign方法并不适合用于合并两个或多个纯粹的对象,因为它会将源对象的原型链上的属性也拷贝到目标对象上。
如果目标对象不存在,那么Object.assign会先创建这个对象,再进行属性的合并。
Object.assign在ES6中新增,如果你需要在ES5或者更早的Javascript版本中使用它,你可以使用以下Polyfill代码:
if (typeof Object.assign !== 'function') {
Object.assign = function(target, varArgs) {
if (target == null) {
throw new TypeError('Cannot convert undefined or null to object');
}
const to = Object(target);
for (let index = 1; index < arguments.length; index++) {
const nextSource = arguments[index];
if (nextSource != null) {
for (const nextKey in nextSource) {
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
to[nextKey] = nextSource[nextKey];
}
}
}
}
return to;
};
}
这个Polyfill代码可以在window, global或其他对象上定义一个新的Object.assign方法,如果原生的Object.assign方法不存在,就会使用这个Polyfill方法。
Object.assign是一个非常有用的函数,可以帮助我们合并配置,创建混合对象,复制对象以及更多。在编写Javascript代码时,我们应该尽量使用现成的函数,而不是重复造轮子。