我正在构建一个MVC风格的JavaScript游戏,但我遇到了一个问题。我需要在调用函数之前检查keyState是否为39,但是我收到以下错误:
Uncaught TypeError: _self.keyHandler is not a function
任何人都可以帮助我吗?问题在于以下代码:
if(keyState[39] = true){
_self.keyHandler();
};
完整代码:
GOBLINS.Controller.prototype.input = function() {
var _self = this;
var keyState = {};
window.addEventListener('keydown', function(e){
if(e.keyCode === 39){ // Move Right
keyState[e.keyCode] = true;
};
if(e.keyCode === 37){ // Move Left
keyState[e.keyCode] = true;
};
if(e.keyCode === 38){ // Move Up
keyState[e.keyCode] = true;
};
if(e.keyCode === 40){ // Move Down
keyState[e.keyCode] = true;
};
}, true);
window.addEventListener('keyup', function(e){
if(e.keyCode == 39){
keyState[e.keyCode] = false;
};
if(e.keyCode == 37){
keyState[e.keyCode] = false;
};
if(e.keyCode == 38){
keyState[e.keyCode] = false;
};
if(e.keyCode == 40){
keyState[e.keyCode] = false;
};
}, true);
if(keyState[39] = true){
_self.keyHandler();
};
this.keyHandler = function(){
if(keyState[39] === true){
this.M.images[2].moveRight();
console.log(this.M.images[2]);
};
if(keyState[37] === true){
this.M.images[2].moveLeft();
};
if(keyState[38] === true){
this.M.images[2].moveUp();
};
if(keyState[40] === true){
this.M.images[2].moveDown();
};
};
window.requestAnimationFrame(function(){
_self.input();
});
};
答案 0 :(得分:0)
在分配之前,您正在调用_self.keyHandler()
三行。
你有这个块:
if(keyState[39] = true){
_self.keyHandler();
};
在此之前:
this.keyHandler = function(){
// ...
}
为了工作,必须采用相反的方式。
此外,正如Icepickle所指出的那样,keyState[39] = true
是一项任务(因此始终为真),因此您可能希望将=
替换为==
。
使用功能,您可以执行以下操作:
a();
function a(){}
因为函数声明被提升(移动到定义它们的作用域的顶部)
但对于属性,这不适用,并且由于this.keyHandler
是属性,因此上述内容不适用,并且您收到错误。