📜  JavaScript Object.assign()

📅  最后修改于: 2020-09-27 06:41:29             🧑  作者: Mango

JavaScript Object.assign()方法将给定对象的所有可枚举的自身属性复制到单个对象并返回它。

assign()方法的语法为:

Object.assign(target, ...sources)

使用Object类名称调用作为静态方法的assign()方法。


Assign()参数

assign()方法采用:

  • target-目标对象-将源属性应用到的对象,修改后将返回该对象。
  • -源对象—包含要应用的属性的对象。

从assign()返回值
  • 返回目标对象。

注意:如果目标对象中的属性具有相同的键,则它们将被源中的属性覆盖。


示例1:使用Object.assign()克隆和合并对象
// cloning objects
const obj = {
  name: "Alan Turing",
  age: 120,
};

let newObject = {};

const copy = Object.assign(newObject, obj);
// modifies the target object
console.log(newObject);
// returns the modified object
console.log(copy);

// merging objects
const o1 = { a: 1, b: 2, c: 3 };
const o2 = { b: 12, c: 13 };
const o3 = { c: 23 };

// Earlier source keys are overwritten by later sources
const o4 = Object.assign({}, o1, o2, o3);

console.log(o4); // { a: 1, b: 12, c: 23 }

输出

{ name: 'Alan Turing', age: 120 }
{ name: 'Alan Turing', age: 120 }
{ a: 1, b: 12, c: 23 }

请注意,如果源值是对对象的引用,则它仅复制该引用值。

另外,以后的源的属性会覆盖以前的源的属性。


示例2:使用Object.assign()
const obj = Object.create(
  { a: 1 },
  {
    // a is on obj's prototype chain.
    b: {
      value: 2, // b is a non-enumerable property.
    },
    c: {
      value: 3,
      enumerable: true, // c is an own enumerable property.
    },
  }
);

let copy = Object.assign({}, obj);
console.log(copy); // { c: 3 }

copy = Object.assign(copy, "abc", 100, null);
console.log(copy); // { '0': 'a', '1': 'b', '2': 'c', c: 3 }

输出

{ c: 3 }
{ '0': 'a', '1': 'b', '2': 'c', c: 3 }

如您所见,无法复制原型链上的属性和不可枚举的属性。

同样,基元将被包装到对象,null和undefined将被忽略。

由于只有字符串具有可枚举的属性,因此它们将被复制到目标对象。


推荐阅读: Javascript对象defineProperties()