Необычный синтаксис для создания метода объекта из единственного строкового массива элемента

Я наткнулся на этот урок по избыточным действиям и заметил необычный синтаксис для создания метода объекта:

const stringArray = ["STRING_ARRAY"];

const strangeObject = {
  [stringArray]() {
    console.log(stringArray);
  }
};

Может кто-нибудь назвать или объяснить используемую синтаксическую функцию?

1 ответ

Решение

Это сочетание двух особенностей ES6,

Вы можете вычислить свойство в объекте:

const b = "foo";
const a = {
    [b]: true
};

// same as
const a = {};
a[b] = true;

Существует также сокращение для функций:

const a = {
    b() { console.log("foo");}
};

// same as
const a = {
    b: function() { console.log("foo");}
};

Если вы смешаете их, вы получите то, что у вас есть: метод, имя которого является вычисленным значением. Здесь ваш объект будет таким же, как

const strangeObject = {
    STRING_ARRAY: function() {
        console.log("STRING_ARRAY");
    }
};

Всякий раз, когда вычисленное значение для объекта не является строкой, как в вашем случае, оно будет преобразовано в строку.

В твоем случае

["STRING_ARRAY"].toString() === "STRING_ARRAY"

так что это мало что меняет.

Другие вопросы по тегам