Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript查找表vs else if和多个匹配结果_Javascript_Object_Literals_Lookup Tables - Fatal编程技术网

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

Javascript查找表vs else if和多个匹配结果,javascript,object,literals,lookup-tables,Javascript,Object,Literals,Lookup Tables,我正在创建一个有趣的画布游戏,我正在尝试重新考虑我的多个else if语句,以使用对象查找表 这是我当前用于在按下键时分配变量值的代码: 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

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

这是我当前用于在按下键时分配变量值的代码:

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]();
}
这很好,但我不确定分配底部键是最好的方法?显然,我不能在左手赋值中使用| |运算符,那么有没有更干净的方法来实现这一点,或者我应该只使用else if

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

任何建议都很好。谢谢。

这个怎么样

var codes = function (){
  function rightKey(){
    rightKey = true;
  }

  function leftKey() {
    leftKey = true;
  }

  return {
    39 : rightKey,
    37 : leftKey,
    '...': '...',
    68 : rightKey,
    65 : leftKey

}}()
为什么不使用语句呢

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(); 
    }
}

是的,我认为这样做是正确的。我唯一关心的是重复值的重复部分-39:rightKey,68:rightKey。现在这是否会使代码比if语句更冗长,或者这样会更有效?当我们关注效率时,我们在这里调用函数来返回键值;调用函数或计算if语句的开销最大的是哪个?if语句应该更快。但是,首先,我认为现代js引擎可以优化此类函数调用,而且效率几乎相同,其次,你确定需要如此低水平的优化吗?效率与你提出的变量完全相同这看起来是一个不错的解决方案。我不知道我可以在每种情况下同时使用这两种情况!(虽然switch语句语法看起来有点奇怪:D)