假设我有如下代码块:

keysPressed = new Object();
document.onkeydown = function(e) {
    keysPressed[e.charCode] = true;
}
document.onkeyup = function(e) {
    keysPressed[e.charCode] = false;
}


从理论上讲,这应该让我留下一个对象,在该对象中我可以进入keysPressed.w来检查当前是否按下了“ w”。

我可以在JavaScript控制台中看到所有属性的定义都像普通一样,但是每当我尝试访问它们时,它都表明它们是未定义的。我怀疑属性在定义它们的函数内部具有局部作用域,并且无法在其他地方访问。有什么方法可以解决这个问题,而无需创建一堆全局变量?

提前致谢!

最佳答案

这里的问题是charCode返回一个数字值。因此,不是为w添加属性,而是为数字87添加属性。您想使用String.fromCharCode在此处获取字符串表示形式

keysPressed = new Object();
document.onkeydown = function(e) {
    keysPressed[String.fromCharCode(e.charCode)] = true;
}
document.onkeyup = function(e) {
    keysPressed[String.fromCharCode(e.charCode)] = false;
}


现在,如下所示的代码将起作用(注意使用大写W而不是小写)

if (keysPressed.W) {
  ...
}

10-06 07:54