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中。
请引导我,我错过了什么?
发布于 2021-04-13 06:18:17
因为Object.assign()有语法Object.assign(target, source),所以您使用user1作为目标。因此,使用空对象{}作为目标,以便将对象合并到该目标中,并且不更改user1对象。
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语法来实现这一点:
let user1 = {
name: "ahmed"
};
let employee1 = {
...user1,
...{ permission: "can edit" }
}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
发布于 2021-04-13 06:36:52
根据MDN's医生的说法
属性在
target object are overwritten by properties in the sources if they have the same key中。后继源的属性覆盖早期的
而且,语法是
Object.assign(target, ...sources)这就是为什么user1被改变的原因。
解决方案,有两个选项:
target创建一个虚拟{}对象。请靠近第二个param ...sources,规格说明
Object.assign()方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象
因此,从充当source的第二个params开始。
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' }
let user1 = { name: "ahmed" };
let employee1 = {...user1, ...{permission: 'can edit'}}
console.log(user1); // { name: 'ahmed' }
console.log(employee1); //{ name: 'ahmed', permission: 'can edit' }
发布于 2021-04-13 06:20:52
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)中,这就是为什么它在这两个方面都返回的原因。所以,尝试{}在第一左侧或使用以上的速记。
https://stackoverflow.com/questions/67069593
复制相似问题