【问题标题】:JavaScript Boolean function within an objects properties对象属性中的 JavaScript 布尔函数
【发布时间】: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


【解决方案1】:

在标有“代码 1”的部分的 37 中,您有:

if (Key.right && obj.checkRight) {

应该是什么时候

if (Key.right && obj.checkRight()) {

前者测试方法的真实性,将被强制为true,因为函数在JS中是真实的。后者调用方法并在条件表达式中使用返回值。

【讨论】:

  • 我试过这样做,它完全阻止了 obj 向右移动
  • 事实证明这是正确的,但我用 > 而不是
【解决方案2】:

此外,如果条件不满足,您的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);
},

【讨论】:

  • 是的,我先尝试了这种方法,但遇到了和现在一样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2013-10-11
  • 2016-01-05
  • 2014-12-29
  • 1970-01-01
相关资源
最近更新 更多