Javascript 如何使用排列运算符向对象添加特性,而不是覆盖它?
我有这个功能Javascript 如何使用排列运算符向对象添加特性,而不是覆盖它?,javascript,function,object,ecmascript-6,spread-syntax,Javascript,Function,Object,Ecmascript 6,Spread Syntax,我有这个功能 function foo(newdata) { utils.method('GET', '/auth', { response: { data: { settings: { last_email_notification_shown_date: new Date(), email_notifications: null, }
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
}
...newdata
}
}
});
}
但每次我想更新“设置”属性时,我都必须将其全部传递给数据:
foo(settings {
last_email_notification_shown_date: new Date(),
email_notifications: null,
SomeNewProperty: 'whatever'
})
是否有一种方法可以更新此函数中的“设置”属性,而无需全部重写?我只想更新属性,而不是覆盖它
是否有一种方法可以更新此函数中的“设置”属性,而无需全部重写
从你的问题很难判断你到底在做什么,但如果你的目标是在现有设置中添加newdata
,那么你只是在错误的地方传播它:
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
...newdata // <============================ moved
}
}
}
});
}
如果需要使用对象调用foo
,对象中的内容不在settings
范围内,也不在settings
范围内,则调用会稍微复杂一些,但不会太多:
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
...newdata, // <========================
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
...newdata.settings // <========================
},
}
}
});
}
它传播
newdata
(包括settings
),然后用替换settings
覆盖新对象中newdata
的settings
,在该对象中传播newdata。settings
是否有权访问现有设置?还要注意的是,您的第二个代码块有一个语法错误,这使您很难判断您真正在做什么。(旁注:…
不是运算符,它是主要语法;它不能是运算符,因为它没有一个结果值。这并不重要。:-)但如果它是运算符,它不会在不同的情况下做不同的事情[分散与休息],你可以在任何地方使用它。但您只能在定义该语法的特定位置使用spread和rest。)
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
...newdata, // <========================
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
...newdata.settings // <========================
},
}
}
});
}
foo({
settings: {
SomeNewProperty: 'whatever'
},
otherStuff: "foo"
});