函数是在循环外定义的,而不是放在循环中时定义的?

时间:2015-10-31 16:34:14

标签: javascript loops canvas

我正在尝试在循环中运行一个函数,但是当我运行它时,我得到一个robot.rn不是一个函数。当我在循环外运行函数时,我没有问题,一切都按预期工作。我确信这是显而易见的事情,而且我一直在盯着我的代码太久了。非常感谢任何帮助,谢谢。

我想要完成的基本想法是在随机位置抽取硬币30次(robot.maxCoins = 30);

当我像这样运行我的代码(在循环之外)时,它可以运行

Robot.prototype.rn = function(){
    robot.rn = {
        rnX: robot.rnX = Math.floor(Math.random()*900)-20,
        rnY: robot.rnY = Math.floor(Math.random()*400)-20
    };
    return robot.rn;
};

Robot.prototype.drawCoins = function(){
    robot.rn();
    console.log(robot.rnX);
    ctx.beginPath();
    ctx.arc(robot.rnX,robot.rnY,robot.coinD,0,2*Math.PI);
    ctx.fillStyle = "yellow";
    ctx.fill();
    ctx.stroke();
};

这是循环中的函数代码(return:robot.rn不是函数)

Robot.prototype.rn = function(){
  robot.rn = {
    rnX: robot.rnX = Math.floor(Math.random()*900)-20,
    rnY: robot.rnY = Math.floor(Math.random()*400)-20
  };
  return robot.rn;
};

Robot.prototype.drawCoins = function(){
  for(var i = 0; i<robot.maxCoins; i++){
    robot.rn();
    console.log(robot.rnX);
    ctx.beginPath();
    ctx.arc(robot.rnX,robot.rnY,robot.coinD,0,2*Math.PI);
    ctx.fillStyle = "yellow";
    ctx.fill();
    ctx.stroke();
  }

};

2 个答案:

答案 0 :(得分:1)

您正在覆盖robot.rn

robot.rn = {
    rnX: robot.rnX = Math.floor(Math.random()*900)-20,
    rnY: robot.rnY = Math.floor(Math.random()*400)-20
};
return robot.rn;

在没有循环的情况下使用它时不会失败,因为您不再尝试调用rn函数。

答案 1 :(得分:0)

对robot.rn的第一次调用用一个对象替换该函数。循环中的第二个调用尝试将该对象用作函数。

只需从rn返回您的对象,不要指定它。