📜  javascript object.assign - Javascript (1)

📅  最后修改于: 2023-12-03 14:42:26.112000             🧑  作者: Mango

Javascript中的Object.assign

在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 }
注意事项
  1. Object.assign只能复制源对象自身的可枚举属性到目标对象上。如果一个源对象的属性是一个获取器函数(getter),那么它的返回值不会被复制,只有它的描述符会被复制。

  2. 如果目标对象中的属性具有相同的键,则后面的源对象属性将覆盖原来的属性值。

  3. Object.assign方法并不适合用于合并两个或多个纯粹的对象,因为它会将源对象的原型链上的属性也拷贝到目标对象上。

  4. 如果目标对象不存在,那么Object.assign会先创建这个对象,再进行属性的合并。

Polyfill

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代码时,我们应该尽量使用现成的函数,而不是重复造轮子。