Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用排列运算符向对象添加特性,而不是覆盖它?_Javascript_Function_Object_Ecmascript 6_Spread Syntax - Fatal编程技术网

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"
});