Javascript查找表与else-if和多个匹配结果

Javascript Lookup table vs else if and multiple matching results

本文关键字:结果 查找 else-if Javascript      更新时间:2023-09-26

我正在创建一个有趣的画布游戏,并试图重新考虑我的多个else-if语句中的一些语句,以使用对象查找表。

这是我当前在keydown上分配变量值的代码:

function keyDown(e) {
  keypressed = true;
  if (e.keyCode == 39 || e.keyCode == 68) {rightKey = true; }
  else if (e.keyCode == 37 || e.keyCode == 65) {leftKey = true;}
  else if (e.keyCode == 38 || e.keyCode == 87) {upKey = true; }
  else if (e.keyCode == 40 || e.keyCode == 83) {downKey = true; }
  else if (e.keyCode == 80) { isPaused = !isPaused; document.body.classList.toggle('pause'); }
  if (e.keyCode === 69) { startHit(); }
}

我想分配wsad键和箭头键来做同样的事情,从而在if条件中使用||。

我读到使用对象文字查找表是实现这一目标的更快方法,这是我的尝试:

var codes = {
    39 : function() {
      return rightKey = true;
    },
    37 : function() {
      return leftKey = true;
    },
    38 : function() {
      return upKey = true;
    },
    40 : function() {
      return downKey = true;
    },
    80 : function() {
      isPaued = !isPaused;
      document.body.classList.toggle('pause');
    },
    69 : startHit
}
codes[68] = codes[39];
codes[65] = codes[37];
codes[87] = codes[38];
codes[83] = codes[40];
function keyDown(e) {
    keypressed = true;
    codes[e.keyCode]();
}

这很好,但我不确定底部键的分配是最好的方法吗?我显然不能在左手边的赋值中使用||运算符,那么有没有一种更干净的方法可以做到这一点,或者我应该只使用其他if?

此外,我知道我可以使用switch语句,但我觉得它看起来与我上面所做的类似。

任何建议都很好。谢谢

为什么不使用switch语句?

function keyDown(e) {
    keypressed = true;
    switch (e.keyCode) {
        case 39:
        case 68:
            rightKey = true;
            break;
        case 37:
        case 65: 
            leftKey = true;
            break;
        case 38:
        case 87: 
            upKey = true; 
            break;
        case 40:
        case 83: 
            downKey = true;
            break;
        case 80:
            isPaused = !isPaused; 
            document.body.classList.toggle('pause');
            break;
        case 69:
            startHit(); 
    }
}

这个怎么样?

var codes = function (){
  function rightKey(){
    rightKey = true;
  }
  function leftKey() {
    leftKey = true;
  }
  return {
    39 : rightKey,
    37 : leftKey,
    '...': '...',
    68 : rightKey,
    65 : leftKey
}}()