JavaScript对象属性中的布尔函数

时间:2017-10-31 20:10:04

标签: javascript function javascript-objects

我试图从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函数工作?

2 个答案:

答案 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);
},