如何引用对象中的键(而不是值)来实现对计算器的键盘支持?

我正在尝试为我的计算器添加键盘支持,这样您就可以按键而不是单击屏幕。这看起来是练习使用对象的好机会,但我显然在这里做错了。你能给我一个提示吗?


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 语句,但我怀疑有一种更优雅的方法可以做到这一点。


富国沪深
浏览 58回答 3
3回答

HUX布斯

好吧,既然您已经有一个将键码映射到函数的对象,您可以像这样简单地调用它们:document.addEventListener("keydown", checkKeyPressed, false);function checkKeyPressed(e) {&nbsp; &nbsp; if (keyboard[e.keyCode] != undefined) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;keyboard[e.keyCode](e); //<--&nbsp; you need to call the function, once you get it...&nbsp; &nbsp; }};或者甚至,function checkKeyPressed(e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;keyboard[e.keyCode] ? keyboard[e.keyCode](e) : null;&nbsp;};

呼唤远方

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

千万里不及你

你可以只用一个 if 语句function checkKeyPressed(e) {&nbsp; &nbsp; if (keyboard[e.keyCode])&nbsp; &nbsp; &nbsp; &nbsp; keyboard[e.keyCode]();}如果e.keyCode不是对象键盘中的值之一,keyboard[e.keyCode]将返回undefined并且内部代码将不会运行。您还需要在函数后添加括号才能实际调用它
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript