我试图从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&#39;代码直接进入draw()if语句,它工作正常。有谁知道它为什么不作为obj函数工作?
答案 0 :(得分:0)
在标有“代码1”的部分的37中,您有:
if (Key.right && obj.checkRight) {
什么时候应该
if (Key.right && obj.checkRight()) {
前者测试方法的真实性,并将被强制转换为true
,因为JS中的函数是真实的。后者调用该方法并使用条件表达式中的返回值。
答案 1 :(得分:0)
此外,如果条件不满足,您的checkRight()
方法永远不会返回,因为只有条件为true
才会返回。
当你有一个if
块时,有一种更好的模式可以根据一个条件或一组条件返回一个布尔值。而不是:
checkRight: function() {
if (obj.positionX < (canvas.width - obj.radius)){
return true;
} else {
return false;
}
},
只需返回条件本身:
checkRight: function() {
return obj.positionX < (canvas.width - obj.radius);
},