Синтаксис JavaScript, который выглядит как функция Array: [variable] ({key}, arg) {} - PullRequest
0 голосов
/ 26 февраля 2019

Меня попросили изучить код работодателя, В коде работодатель сделал что-то вроде этого:

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

Теперь, в этом я не могу исправить эту строку кода

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

Как это функция или как?Может кто-нибудь объяснить мне приведенный выше синтаксис?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Используется синтаксис объекта метода в сочетании с именами вычисляемых свойств и деструктуризация в списке параметров.

ACTIONS.ITEM_LIST.LOAD предположительно оцениваетк объекту: доступ к свойству .name объекта, вероятно, приводит к строке.Например, если строка "foo", то строка там эквивалентна:

const actions = {
  'foo': function(arg1, payload) {
    let commit = arg1.commit; // using "let" because parameters can be reassigned
    const type = payload
    // ...
};
export actions;

(Технически это не полностью эквивалентно , но это почти так - методы объекта могутне будет использоваться в качестве конструкторов.)

0 голосов
/ 26 февраля 2019

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

преобразуется в синтаксис объявления функции:

functionName (arguments) {заявления}

Здесь есть пара вещей, которые играют роль.Во-первых, actions - это объект.Затем он использует новый синтаксис имени вычисляемого свойства.т. е. [ACTIONS.ITEM_LIST.LOAD.name] предоставит functionName часть нашего синтаксиса.Обратите внимание, что это не массив, это вычисляемое свойство , которое также будет ключом нашего словаря действий.Наконец, он использует Сокращенные имена методов синтаксис для создания функции в объекте actions , не записывая ее как "ключ: значение" нотация.Это также ново в ECMAScript2015.

Эта ссылка здесь даст вам ясное представление, если я не проясню все ваши сомнения.

0 голосов
/ 26 февраля 2019

New-ish JavaScript разрешает имена свойств в литеральных выражениях объекта (как называется этот { } блок, инициализирующий actions) для вычисления имен свойств из выражений, позволяя [ ] для имен свойств вместоидентификаторы или строковые константы, как в прошлом.

Так что это означает, что ACTIONS.ITEM_LIST.LOAD.name должен быть оценен, а строковое значение того, что заканчивается, используется в качестве имени свойства функции объекта,(Это также является новой функцией языка; раньше свойства должны были строго name : value).

Теперь внутри списка формальных параметров этой функции {commit} является деструктурирующим формальный параметр.Это означает, что функция ожидает, что первый аргумент будет объектом, и поэтому внутри функции параметр (переменная) commit должен быть связан со значением свойства commit этого объекта (или undefined, если существует).не является таким свойством).

Так что если мы предположим в качестве примера, что ACTIONS.ITEM_LIST.LOAD.name вычисляет строку "xyz", то можно было бы вызвать:

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

и вфункция строка "everything" будет значением параметра commit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...