Javscript语法类似于Array函数:[variable]({key},arg){}

时间:2019-02-26 05:44:18

标签: javascript ecmascript-6

好的,我对JavaScript没有太多的经验。

我被要求研究雇主的守则,在守则中,雇主做了类似的事情

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

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

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

像是函数还是什么?有人可以向我解释以上语法吗?

3 个答案:

答案 0 :(得分:1)

新颖的JavaScript允许对象文字表达式(称为{ }初始化actions的块)中的属性名称,通过允许{{1 }}代替过去的标识符或字符串常量。

所以这意味着应该对[ ]进行求值,并将最终得到的值的字符串值用作对象的function属性的名称。 (这也是该语言的新功能;以前的属性必须严格ACTIONS.ITEM_LIST.LOAD.name)。

现在在形式参数列表中该函数中,name : value是一个 destructuring 形式参数。这意味着函数期望第一个参数将是一个对象,因此在函数内部,参数(变量){commit}应该绑定到该对象的“ commit”属性的值(或{{1 }}(如果没有此类属性)。

因此,如果出于示例目的假设commit的计算结果为字符串“ xyz”,则可以调用:

undefined

,在函数中,字符串“ everything”将是ACTIONS.ITEM_LIST.LOAD.name参数的值。

答案 1 :(得分:1)

它将对象method语法与参数列表中的computed property namesdestructuring结合使用。

[ { "display": "client", "value": "client" }, { "display": "firstname", "value": "firstname" }, { "display": "lastname", "value": "lastname" } ] 可能会评估为一个对象:访问该对象的 <v-combobox v-model="password.keys" label="Add keys" chips item-text="display" item-value="value" prepend-icon="filter_list" solo multiple > <template slot="selection" slot-scope="data"> <v-chip :selected="data.selected" close @input="remove(data.item)" > <strong>{{ data.item.display }}</strong>&nbsp; </v-chip> </template> </v-combobox> 属性可能会评估为一个字符串。例如,如果字符串为“ foo”,则该行等效于:

ACTIONS.ITEM_LIST.LOAD

(从技术上说,它不是完全等效的,但几乎是-对象方法不能用作构造函数。)

答案 2 :(得分:0)

  

[ACTIONS.ITEM_LIST.LOAD.name]({commit},有效载荷){

将解析为函数声明语法:

functionName(参数){     陈述 }

这里有几件事起作用。 首先,动作是一个对象。 接下来,它使用新的计算属性名称语法。 即 [ACTIONS.ITEM_LIST.LOAD.name] 将提供我们语法的functionName部分。请注意,这不是一个数组,而是一个计算属性,这也是我们的动作字典的关键。 最后,它使用速记方法名称语法在对象 actions 中创建函数,而无需将其编写为“键:值” 表示法。这也是ECMAScript2015中的新功能。

如果我不确定您的所有疑问,那么此链接here会为您提供清晰的思路。