Object.assign

语法:

Object.assign(target, ...sources)

参数:

target        目标对象。

sources      源对象。

返回值:

目标对象

复制一个对象:

var obj = { a: 1 };

var copy = Object.assign({}, obj);

console.log(copy); // { a: 1 }

深克隆:

  let obj1 = { a: 0 , b: { c: 0}};

  let obj2 = Object.assign({}, obj1);

  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}

  obj1.a = 1;

  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}

  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}

  obj2.a = 2;

  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}

  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}

  obj2.b.c = 3;

  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}

  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}

  // Deep Clone  JSON.parse(JSON.stringify(obj1));

  obj1 = { a: 0 , b: { c: 0}};

  let obj3 = JSON.parse(JSON.stringify(obj1));

  obj1.a = 4;

  obj1.b.c = 4;

  console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}

合并对象:

var o1 = { a: 1 };

var o2 = { b: 2 };

var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);

console.log(obj); // { a: 1, b: 2, c: 3 }

console.log(o1);  // { a: 1, b: 2, c: 3 }    //目标对象也会被改变

合并具有相同属性的对象:

var o1 = { a: 1, b: 1, c: 1 };

var o2 = { b: 2, c: 2 };

var o3 = { c: 3 };

var obj = Object.assign({}, o1, o2, o3);

console.log(obj); // { a: 1, b: 2, c: 3 }

属性会被后续参数具有相同属性的其他对象覆盖

继承属性和不可枚举属性是不能拷贝的:

var obj = Object.create({foo: 1}, { // foo 是个继承属性。

    bar: {

        value: 2  // bar 是个不可枚举属性。

    },

    baz: {

        value: 3,

        enumerable: true    // 对象的属性分为可枚举和不可枚举之分 是由属性的enumerable的值决定的

    }

});

var copy = Object.assign({}, obj);

console.log(copy); // { baz: 3 }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容