首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Object.assign查询

Object.assign查询
EN

Stack Overflow用户
提问于 2021-04-13 06:14:51
回答 4查看 201关注 0票数 6
代码语言:javascript
复制
let user = { name: "Nasir", age: 25 };
let employee = Object.assign( {}, user, { add: "dhaka", age: 35 } );

console.log( user ); //{ name: 'Nasir', age: 25 }
console.log( employee ); // { name: 'Nasir', age: 35, add: 'dhaka' }

//------------------------------------------//

let user1 = { name: "ahmed" };
let employee1 = Object.assign( user1, { permission: "can edit" } );

console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 ); //{ name: 'ahmed', permission: 'can edit' }

为什么user1 permission**?**对象获取属性:对象

我将user1对象属性复制到employee1中,并添加附加属性permission,因此应该只在employee1对象上找到permission,而不是在user1中。

请引导我,我错过了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-13 06:18:17

因为Object.assign()有语法Object.assign(target, source),所以您使用user1作为目标。因此,使用空对象{}作为目标,以便将对象合并到该目标中,并且不更改user1对象。

代码语言:javascript
复制
let user1 = {
  name: "ahmed"
};
let employee1 = Object.assign({}, user1, {
  permission: "can edit"
});
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }

您甚至可以使用spread语法来实现这一点:

代码语言:javascript
复制
let user1 = {
  name: "ahmed"
};
let employee1 = {
  ...user1,
  ...{ permission: "can edit" }
}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }

票数 6
EN

Stack Overflow用户

发布于 2021-04-13 06:36:52

根据MDN's医生的说法

属性在target object are overwritten by properties in the sources if they have the same key中。后继源的属性覆盖早期的

而且,语法是

代码语言:javascript
复制
Object.assign(target, ...sources)

这就是为什么user1被改变的原因。

解决方案,有两个选项:

  1. 通过在第一次param中添加target创建一个虚拟{}对象。

请靠近第二个param ...sources,规格说明

Object.assign()方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象

因此,从充当source的第二个params开始。

代码语言:javascript
复制
let user1 = { name: "ahmed" };
let employee1 = Object.assign({}, user1, { permission: "can edit" } );

console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }

  1. 使用在对象文本中传播

代码语言:javascript
复制
let user1 = { name: "ahmed" };
let employee1 = {...user1, ...{permission: 'can edit'}}

console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }

票数 3
EN

Stack Overflow用户

发布于 2021-04-13 06:20:52

代码语言:javascript
复制
let user1 = { name: "ahmed" };
let employee1 = {...user1,...{ permission: "can edit" }};
console.log( user1 ); // { name: 'ahmed', permission: 'can edit' }
console.log( employee1 );

这里的Object.assign(obj1,obj2 ,....)赋值方法将将所有属性或对象添加到左侧对象或您在第一个Param中的对象(即obj1)中,这就是为什么它在这两个方面都返回的原因。所以,尝试{}在第一左侧或使用以上的速记。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67069593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档