На самом деле это популярная практика, поскольку некоторые люди, как правило, используют объекты для имитации пространств имен из других языков. Я думаю, в этом нет ничего плохого, если вы понимаете ловушки, которые может создать этот подход. Например, вы должны помнить, что происходит с this
при передаче этих функций в качестве параметров (см. Пример ниже):
const store = {
a() {
this.b();
},
b() {
console.log("It works!");
}
}
store.a(); // Logs "It works"
setTimeout(store.a, 10) // Error: this.b is not a function
Также, как заметил @Nick Ovchinnikov, в вашем конкретном примере есть еще один подводный камень. Вы должны убедиться, что при каждом нажатии кнопки среда не будет пытаться вызвать функцию, которая не существует, иначе вы можете столкнуться с ошибкой. В итоге привязка вашего обработчика должна выглядеть примерно так:
document.addEventListener('keydown', e => {
if (typeof keyAction[e.key] === 'function') {
keyAction[e.key]();
}
});