Javascript 组合属性速记和rest:{type,which,selected:{…selected,…hovered}}}:what';这里发生了什么事?

Javascript 组合属性速记和rest:{type,which,selected:{…selected,…hovered}}}:what';这里发生了什么事?,javascript,ecmascript-6,Javascript,Ecmascript 6,编辑:对于每个说我需要提供背景的人:答案就在这里。下面的两个变量--类型和其中--来自此表达式外部的源,通过展开创建的对象中的所有内容都指定给选定对象。我在想,不知何故,这些类型和类型也从传播创造的对象中获得了它们的价值。不是这样 我正在修改一位离职的首席开发人员的代码,遇到了一个我不理解的公式 {type,which,selected:{…selected,…hovered}} 从这段代码 export const renderSelector = createSelector( sele

编辑:对于每个说我需要提供背景的人:答案就在这里。下面的两个变量--
类型
其中
--来自此表达式外部的源,通过展开创建的对象中的所有内容都指定给选定对象。我在想,不知何故,这些类型和类型也从传播创造的对象中获得了它们的价值。不是这样

我正在修改一位离职的首席开发人员的代码,遇到了一个我不理解的公式

{type,which,selected:{…selected,…hovered}}

从这段代码

export const renderSelector = createSelector(
  selectedTypeSelector,
  selectedSelector,
  hoveredSelector,
  (type, selected, hovered) => memoize(
    which => loadRender({ type, which, selected: { ...selected, ...hovered } }),
  ),
);
我已经非常仔细地研究了ES6特性,不记得见过这个。我完全理解右手边的扩散,但我不清楚左手边发生了什么。也就是说:
类型是什么,所选:
具体做什么?我四处询问,有人向我解释说,上面的
左侧的字段名捕获了由
{…selected,…hovered}
创建的对象中的匹配字段,如果左侧有不匹配字段名,则将不匹配字段放在一个
rest
数组中。有人能给我指一个描述这个的链接吗?谢谢

看起来像

{ type, which, selected: { ...selected, ...hovered } } 
某些变量组合到单个对象,如下所示:

  • 类型
  • 哪个
  • 选择了一个新对象
    ,其属性为
    
    • 选定的
      ,其中包含一个对象
    • 悬停
      ,其中也包含一个对象
带有和用于对象。

表达式

{ type, which, selected: { ...selected, ...hovered } }
几乎等于

{
    "type": type,
    "which": which,
    "selected": Object.assign({}, selected, hovered)
}
其中
类型
哪个
选中
,以及
悬停
都是局部变量。换句话说,
“type”
是使用指定的,
“selected”
被明确指定为所选的
和悬停的
的浅层合并



1我之所以说“几乎”,是因为
对象.assign
触发属性设置程序,而
..
对象扩展语法不触发属性设置程序。

您可以使用
类型
wich
选中
悬停
创建一个新对象

consttype='value of type';
常量which=‘which的值’;
const selected={propOfSelected:'value1',sharedtop:'value1'};
悬停常量={sharedProp:'value2',newProp:'value of new prop'};

log({type,which,selected:{…selected,…hovered}})
这行在什么上下文中?看起来它只是构造了一个对象,其中包含
类型
属性和
属性,每个属性都在中,另一个
已选择
属性。没什么特别的。@Xufox说到点子上了——没有上下文,我们只能给你一些可能毫无用处的信息。例如,
type
将在名为
type
的对象上定义一个新键,该键将具有
type
变量中包含的任何值。这是一个正确的解释,但可能对您没有用处。如果在lhs上,您不能有两个具有rest参数的目标对象。请创建一个具有
type
wich
属性的对象,这些属性的值为
type
wich
值(这些是范围内的参数),详细信息。新对象有一个
selected
属性,该属性是一个对象,该对象具有所有
selected
变量键,并由悬停的
扩展或覆盖