编辑:对于所有说我需要提供背景的人:答案就在其中。下面的两个变量 - type
和 which
- 来自该表达式的外部源,并且通过传播创建的对象中的所有内容都分配给 selected。我在想,以某种方式, type 和 which 也从传播创建的对象中接收它们的值。事实并非如此!
我正在修改一位已离职的首席开发人员的代码,并且遇到了我不理解的表述。
{ type, which, selected: { ...selected, ...hovered } }
从这段代码
export const renderSelector = createSelector(
selectedTypeSelector,
selectedSelector,
hoveredSelector,
(type, selected, hovered) => memoize(
which => loadRender({ type, which, selected: { ...selected, ...hovered } }),
),
);
我已经相当仔细地研究过 ES6 特性,但不记得见过这个。我完全了解右侧的传播情况,但我不清楚左侧发生了什么。也就是说:type,which,selected:
到底是做什么的?我四处询问,有人向我解释说,上面 :
左侧的字段名称捕获由 { ...selected, ...hovered }< 创建的对象中的匹配字段
并且如果左侧有不匹配的字段名称,则将不匹配的字段放在一个 rest
数组中。有人可以向我指出描述此内容的链接吗?谢谢!
最佳答案
表达式
{ type, which, selected: { ...selected, ...hovered } }
几乎1相当于
{
"type": type,
"which": which,
"selected": Object.assign({}, selected, hovered)
}
其中type
、which
、selected
和hovered
是局部变量。换句话说,"type"
和 "which"
是使用 property shorthand 指定的。 ,并且 "selected"
被显式指定为 selected
和 hovered
的浅层合并。
1 我说“几乎”是因为 Object.assign
触发属性 setter ,而 ...
对象扩展语法则不会。
关于javascript - 结合属性简写和其余 : { type, 其中,selected : { . ..selected, ...hovered } } : what's happening here?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239387/