【发布时间】:2017-10-31 20:10:03
【问题描述】:
我正在尝试从 obj 中的方法访问布尔值
代码 1 - 错误
var obj = {
positionX : 700,
radius : 10,
checkRight : function(){
if (obj.positionX < (canvas.width - obj.radius)){
return true;
}
},
moveRight : function(){this.positionX += 5;}
};
var Key = {
right : false
};
document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
function keyDownHandler(event) {
switch(event.keyCode) {
case 39:
Key.right = true;
break;
}
};
function keyUpHandler(event) {
switch(event.keyCode) {
case 39:
Key.right = false;
break;
}
};
function draw() {
drawObj();
if (Key.right && obj.checkRight){ // I've also tried if (Key.right && obj.checkRight==true)
obj.moveRight();
}
};
代码 2 - 有效但不整洁
var obj = {
positionX : 700,
radius : 10,
moveRight : function(){this.positionX += 5;}
};
var Key = {
right : false
};
document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
function keyDownHandler(event) {
switch(event.keyCode) {
case 39:
Key.right = true;
break;
}
};
function keyUpHandler(event) {
switch(event.keyCode) {
case 39:
Key.right = false;
break;
}
};
function draw() {
drawObj();
if (Key.right && obj.positionX < (canvas.width - obj.radius)){
obj.moveRight();
}
};
这个想法是当 obj 到达画布边缘时应该停止向右移动。但是,使用此代码,它根本不会正确移动。但是,如果我将“checkRight”代码直接放入 draw() if 语句中,它就可以正常工作。有谁知道为什么它不能作为 obj 函数工作?
【问题讨论】:
-
这是因为
obj.checkRight是一个函数——但你没有调用它——添加()来调用它!obj.checkRight()- 简单地运行obj.checkRight将返回函数定义,这是真实的,所以if (obj.checkRight)将始终通过。
标签: javascript function javascript-objects