Object.assign()函数如何在ES6中使用

  介绍

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中使用