es6 hash array index вызов функции смешанный синтаксис


Что это за синтаксис ES6?

{
  [ActionTypes.Repo](state, { username, res }) {
    /* ... */
  },

  [ActionTypes.Repo2](state, { username, res }) {
    /* ... */
}

Взято из : https://github.com/quangbuule/redux-example/blob/master/src/js/reducers/Repo.js

1 8

1 ответ:

Это определения методов , вычисляемые имена свойств идеструктурирование в работе.

Определения методов предоставляют краткий способ создания свойств, содержащих функции:

// before
var obj = {
  foo: function() {}
};

// now
var obj = {
   foo() {}
};

Это тот же синтаксис для создания методов в определениях class.

Вычисляемые свойства позволяют использовать результат любого выражения в качестве имени свойства в объектном литерале :

var foo='somePropertyName';

// before
var obj = {};
obj[foo] = 42;

// now

var obj = {
  [foo]: 42
};

И, конечно, это тоже работает с определениями методов:

var obj = {
  [foo]() {}
};

Деструктурирование подобно сопоставлению шаблонов и облегчает обращение к вложенным свойствам массива / объекта, если это все, что вам нужно:

// before
function foo(obj) {
  var username = obj.username;
  var res = obj.res;
}

// now
function foo({username, res}) {

}