Как я могу ссылаться на клавиши в объекте (а не на значения), чтобы реализовать поддержку клавиатуры для калькулятора? - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь добавить в свой калькулятор поддержку клавиатуры, чтобы вы могли просто нажимать клавиши вместо того, чтобы нажимать на экран. Это выглядело как хороший шанс попрактиковаться в использовании объектов, но я явно делаю здесь что-то не так. Можете дать мне подсказку?

let keyboard = {
  48: zeroFunc,
  49: oneFunc,
  50: twoFunc,
  51: threeFunc,
  52: fourFunc,
  53: fiveFunc,
  54: sixFunc,
  55: sevenFunc,
  56: eightFunc,
  57: nineFunc
};

Я пробовал что-то вроде этого:

document.addEventListener("keydown", checkKeyPressed, false);
function checkKeyPressed(e) {
    if (e.keyCode === keyboard.key) {
        keyboard[action]
    }
}

и это:

document.addEventListener("keydown", checkKeyPressed, false);
function checkKeyPressed(e) {
Object.keys(keyboard).forEach(key, index) => {
    if (e.keyCode === key) {
      keyboard[index]
    }
  }
};

if для каждого ключевого кода, но я подозреваю, что есть более элегантный способ сделать это.

Ответы [ 3 ]

2 голосов
/ 13 июля 2020

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

document.addEventListener("keydown", checkKeyPressed, false);
function checkKeyPressed(e) {
    if (keyboard[e.keyCode] != undefined) {
         keyboard[e.keyCode](e); //<--  you need to call the function, once you get it...
    }
};

Или, возможно, даже,

function checkKeyPressed(e) {
         keyboard[e.keyCode] ? keyboard[e.keyCode](e) : null; 
};
1 голос
/ 13 июля 2020

Вы можете сделать это с помощью всего одного оператора if

function checkKeyPressed(e) {
    if (keyboard[e.keyCode])
        keyboard[e.keyCode]();
}

Если e.keyCode не является одним из значений на клавиатуре объекта, keyboard[e.keyCode] вернет undefined, а внутренний код не будет run.

Вам также необходимо добавить скобки после функции, чтобы вызвать ее

1 голос
/ 13 июля 2020
document.addEventListener("keydown", checkKeyPressed, false);
function checkKeyPressed(e) {
    const action = keyboard[e.keyCode];
    if (action) action();
}
...