赞
踩
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
- const target = { a: 1, b: 2 };
- const source = { b: 4, c: 5 };
- const source1 = { E: 6, F: 6 };
- const source2 = { G: 7, H: 7 };
- const source3 = { I: 8, J: 8 };
-
- const returnedTarget = Object.assign(target, source,source1,source2,source3);
-
- console.log(target);
- // Expected output: Object { a: 1, b: 4, c: 5, E: 6, F: 6, G: 7, H: 7, I: 8, J: 8 }
-
- console.log(returnedTarget === target);
- // Expected output: true
1、Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象,继承属性和不可枚举属性是不能拷贝的。
2、针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。
3、目标对象自身也会改变
4、异常会打断后续拷贝任务
5. ie不兼容此写法
- function test() {
- 'use strict';
-
- 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
- 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}}
- }
-
- test();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。