首页 > 解决方案 > JavaScript 语法看起来像 Array 函数:[variable] ({ key }, arg) { }

问题描述

我被要求研究雇主的代码,在代码中,雇主做了这样的事情:

export const actions = {
  [ACTIONS.ITEM_LIST.LOAD.name] ({commit}, payload) {
    const type = payload

现在,在这,我无法纠正这行代码

 [ACTIONS.ITEM_LIST.LOAD.name] ({commit}, payload) {

就像它是一个功能还是什么?有人可以解释一下上面的语法吗?

标签: javascriptecmascript-6

解决方案


新式 JavaScript 允许对象文字表达式中的属性名称(调用{ }块初始化actions的内容)通过允许属性名称而不是过去的标识符或字符串常量来从表达式计算属性名称。[ ]

所以这意味着ACTIONS.ITEM_LIST.LOAD.name应该评估它,并且最终成为的字符串值用作对象的函数属性的名称。(这也是该语言的一个新特性;以前的属性必须是name : value严格的)。

现在在该函数的形式参数列表中,{commit}是一个解构形式参数。这意味着该函数期望第一个参数是一个对象,因此在函数内部,参数(变量)commit应该绑定到该对象的“提交”属性的值(或者undefined如果没有这样的属性)。

因此,如果我们假设例如ACTIONS.ITEM_LIST.LOAD.name评估字符串“xyz”的目的,那么可以调用:

var result = actions.xyz({ foo: "bar", commit: "everything" }, somePayload);

在函数中,字符串“everything”将是commit参数的值。


推荐阅读