类似于 Array function : [variable] ({ key }, arg) { } 的 JavaScript 语法

标签 javascript ecmascript-6

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

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

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

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

比如它是一个函数还是什么?有人可以向我解释上面的语法吗?

最佳答案

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

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

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

因此,如果我们出于示例目的假设 ACTIONS.ITEM_LIST.LOAD.name 的计算结果为字符串“xyz”,那么就可以调用:

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

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

关于类似于 Array function : [variable] ({ key }, arg) { } 的 JavaScript 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54879110/

相关文章:

javascript - React 功能组件默认 props 与默认参数

javascript - getOwnPropertyNames 在 Firefox 上忽略 __proto__

TypeScript - 如何在异步方法中访问 "this"

javascript - 添加 CSS 类时出现 jQuery 问题

javascript - 在 ngTagsInput 中如何显示不同情况的验证消息?

javascript - Node.js 它打印相同的结果两次,而不是一次

javascript - "click(e=>{"和 "click(function(e){"之间的区别

Javascript 将canvas 转换为img

javascript - 使用Javascript文件(Google Analytics/Amazon Webstore)修改嵌入式Javascript

javascript - 具有自身默认值的对象解构赋值