Что такое getKey в этом коде?

function getKey(k) {
  return `a key named ${k}`;
}

const obj = {
  id: 5,
  name: 'San Francisco',
  [getKey('enabled')]: true,
};

в консоли набираю

obj.id - получаю 5
obj.name - 'San Francisco'
obj.getKey('enabled') - 

Uncaught TypeError: obj.getKey is not a function 
<anonymous> debugger eval code:1

Что это такое и как это использовать?


Ответы (1 шт):

Автор решения: Алексей Шиманский

В ES2015 появилась возможность Вычисляемых имён свойств. Это позволяет добавлять в скобки [] выражение, которое будет вычислено, как имя свойства

var i = 0;

var a = {
  ['foo' + ++i]: i,
  ['foo' + ++i]: i,
  ['foo' + ++i]: i
};

console.log(a.foo1); // 1
console.log(a.foo2); // 2
console.log(a.foo3); // 3

Как следствие у вас имя свойства будет: "a key named enabled". Обратиться к нему можно также через скобочную нотацию:

obj['a key named enabled']

function getKey(k) {
  return `a key named ${k}`;
}

const obj = {
  id: 5,
  name: 'San Francisco',
  [getKey('enabled')]: true,
};

console.log(obj['a key named enabled']);
console.log(obj[getKey('enabled')]);

→ Ссылка