好的,我对JavaScript没有太多的经验。
我被要求研究雇主的守则,在守则中,雇主做了类似的事情
export const actions = {
[ACTIONS.ITEM_LIST.LOAD.name] ({commit}, payload) {
const type = payload
现在,在此,我无法纠正此代码行
[ACTIONS.ITEM_LIST.LOAD.name] ({commit}, payload) {
像是函数还是什么?有人可以向我解释以上语法吗?
答案 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 names和destructuring结合使用。
[
{
"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>
</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会为您提供清晰的思路。