2012-04-07 36 views
2

比方說,我有這樣的代碼塊:添加屬性對全局變量在Javascript

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

這理論上應該離開我與一個對象,我可以去keysPressed.w檢查「W」是目前按下。

我可以在我的JavaScript控制檯中看到所有屬性都像普通一樣定義,但每當我嘗試訪問它們時,都會說它們未定義。我懷疑這些屬性在定義它們的函數內部有一個局部範圍,並且不能在別處訪問。有什麼辦法可以解決這個問題而不需要創建一大堆全局變量?

在此先感謝!

回答

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) { 
    ... 
} 
+0

非常感謝您!那正是我正在尋找的答案。 – user1318416 2012-04-07 00:13:22