Object.assign()函数如何在ES6中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强> 1. Object.assign()基本用法:强>
对象。分配方法用来将源对象(源)的所有可枚举属性,复制到目标对象(目标)。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。
let targetObj1 =,{,答:1,}; ,,,let sourceObj1 =, {, b: 1,}; ,,,let sourceObj11 =, {, c: 3,}; ,,,Object.assign (targetObj1, sourceObj1,, sourceObj11); ,,,console.log (targetObj1);
注:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
let targetObj1 =, {,, 1,,,, 2,}; ,,,let sourceObj1 =, {, b: 1,}; ,,,let sourceObj11 =, {, c: 3,}; ,,,Object.assign (targetObj1, sourceObj1,, sourceObj11); ,,,console.log (targetObj1);
如果只有一个参数,对象。分配会直接返回该参数。
let targetObj1 =,{,答:4,} ,,,Object.assign (targetObj1); ,,,console.log (targetObj1)
如果该参数不是对象,则会先转成对象,然后返回。
console.log (typeof (Object.assign (2))),
由于定义和空无法转成对象,所以如果它们作为参数,就会报错。
console.log (typeof (Object.assign (null))); , ,console.log (typeof (Object.assign (underfind))),
注意:如果非对象参数出现在源对象的位置(即非首参数),那么处理规则有所不同,首先,这些参数都会转成对象,如果无法转成对象,就会跳过。这意味着,,如果未定义和零不在首参数,就不会报错。其他类型的值(即数值,字符串和布尔值)不在首参数,也不会报错。但是,除了字符串会以数组形式,拷贝入目标对象,其他值都不会产生效果。
对象。分配只拷贝自身属性,不可枚举的属性(可列举的为假)和继承的属性不会被拷贝。
let obj1 =, Object.assign ({, dwb: & # 39; zjl& # 39;,}, , Object.defineProperty ({},, & # 39; zmf& # 39;,, { , 可列举的:假的, , 价值:& # 39;zmf& # 39; , }) , ) , console.log(其中obj1); , let obj2 =, Object.assign ({, dwb: & # 39; zjl& # 39;,}, , Object.defineProperty ({},, & # 39; zmf& # 39;,, { , 可列举的:,真的, , 价值:& # 39;zmf& # 39; , }) , ) , console.log (methoda);
对于嵌套的对象,对象。指定的处理方法是替换,而不是添加。
var target =,{,答:{,b: & # 39; c # 39;,, d:, & # 39; e # 39;,},} , var source =,{,答:{,b: & # 39;你好,,},} , Object.assign(目标,,源);
上面代码中,目标对象的一个属性被源对象的一个属性整个替换掉了,而不会得到{答:{b: & # 39;你好# 39;,d: & # 39; e # 39;}}的结果。这通常不是开发者想要的,需要特别小心。有一些函数库提供Object.assign的定制版本(比如Lodash的_.defaultsDeep方法),可以解决深拷贝的问题。
注意,Object.assign可以用来处理数组,但是会把数组视为对象。
console.log (Object.assign ([1, 2, 3],, [4,, 5]));
其中,4覆盖1 5覆盖2,因为它们在数组的同一位置,所以就对应位置覆盖了。
对象。分配方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
var object1 =,{,答:{,b: 1,},}; , var object2 =, Object.assign({},,中的object1); , object1.a.b =, 2; , console.log (object2.a.b);
<强> 2。用途强>
2.1为对象添加属性
2.2为对象添加方法
2.3克隆对象
function copyFnc(起源),{ , return Object.assign({},起源) , } , var sur =, {,, 1,,,, 2,}; , console.log (copyFnc (sur));
上面代码将原始对象拷贝到一个空对象,就得到了原始对象的克隆。
不过,采用这种方法克隆,只能克隆原始对象自身的值,不能克隆它继承的值。如果想要保持继承链,可以采用下面的代码。
function 克隆(起源),{ , let originProto =, Object.getPrototypeOf(起源); , return Object.assign (Object.create (originProto),来源); , }Object.assign()函数如何在ES6中使用