在Javascript中向全局变量添加属性

时间:2012-04-07 00:01:44

标签: javascript object scope

假设我有一段这样的代码:

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

这理论上应该给我一个对象,我可以去keysPressed.w检查当前是否按下'w'。

我可以在我的JavaScript控制台中看到所有属性都是正常定义的,但每当我尝试访问它们时,都会说它们是未定义的。我怀疑属性在定义它们的函数内部具有局部范围,并且不能在其他地方访问。有没有办法解决这个问题而不创建一大堆全局变量?

提前致谢!

1 个答案:

答案 0 :(得分:1)

这里的问题是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) {
  ...
}