javascript - 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) {
就像它是一个功能还是什么?有人可以解释一下上面的语法吗?
解决方案
新式 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
参数的值。
推荐阅读
- java - Android Studio Camera2预览画面无法添加UI
- ruby-on-rails - 在rails中有一种方法可以格式化一行文本吗?
- python - 我想在另一个 numpy 数组的每一行的末尾添加一个 numpy 数组
- spring-boot - 带Mybatis的spring boot;我可以将 xml 映射器拆分到外部位置吗?
- javascript - 对象索引问题
- ios - 核心数据。“原因”:“在 saveContext() 时找不到用于迁移的映射模型
- rust - 无法构建 dotenv v0.15.0 - 生锈的货物
- python-3.x - 一般表达式 Re.sub()
- php - 作曲家.phar。无法在 Yii2 中打开输入文件
- reactjs - 无法在 React 中关闭 Material UI 表单对话框