为什么我的 setInterval 函数只被调用一次?
Why is my setInterval function only being called once?
我有一个 object/function 开头像
function Game ( board, numBlocks ) {
// ...
this.speedMap = { "fast": 100, "medium": 300, "slow": 600 };
this.curSpeed;
this.mover; // the setInterval(...) function that causes the snake's movement
// This is set when a game is instantiated with startNew(...)
// ...
this.Snake = function ( game )
{
this.createNew = function ( )
{
// ...
}
this.move = function ( )
{
console.log("The move() function got called!"); // test
}
}
// ...
this.startNew = function ( spd ) {
// ...
this.snake = new this.Snake(this);
this.snake.createNew();
// ...
this.curSpeed = spd;
this.mover = setInterval(this.snake.move(), this.speedMap[this.curSpeed]);
}
(为了简单起见,我已经注释掉了所有与我的问题无关的代码)
并且出于某种原因,我附加到 setInterval
的函数仅在我使用
实例化游戏时被调用一次
SG = new Game(snakeBoard, 16);
SG.startNew("medium");
它应该每 300
毫秒调用一次。
实例: http://playclassicsnake.com/play
完整 Javascript: https://github.com/jamkin/Snake/blob/master/SnakeGame/Scripts/game.js
看上面例子中的JS控制台就知道了
The move() function got called!
只印了一次。
我在这里错过了什么?
奖金问题:
在面向对象 Javascript 中创建一个静态 object/function 等价于什么?具体来说,
this.speedMap = { "fast": 100, "medium": 300, "slow": 600 };
在我的对象中对于实例化的每个此类对象都是相同的,因此它应该是 const static
或任何等效的 JS。
替换:
this.snake.move()
有:
this.snake.move
因此,您将拥有:
this.mover = setInterval(this.snake.move, this.speedMap[this.curSpeed]);
setInterval
的第一个参数是一个函数。你不应该调用它。
您的代码在做什么,是将 this.snake.move()
的响应传递给 setInterval
我有一个 object/function 开头像
function Game ( board, numBlocks ) {
// ...
this.speedMap = { "fast": 100, "medium": 300, "slow": 600 };
this.curSpeed;
this.mover; // the setInterval(...) function that causes the snake's movement
// This is set when a game is instantiated with startNew(...)
// ...
this.Snake = function ( game )
{
this.createNew = function ( )
{
// ...
}
this.move = function ( )
{
console.log("The move() function got called!"); // test
}
}
// ...
this.startNew = function ( spd ) {
// ...
this.snake = new this.Snake(this);
this.snake.createNew();
// ...
this.curSpeed = spd;
this.mover = setInterval(this.snake.move(), this.speedMap[this.curSpeed]);
}
(为了简单起见,我已经注释掉了所有与我的问题无关的代码)
并且出于某种原因,我附加到 setInterval
的函数仅在我使用
SG = new Game(snakeBoard, 16);
SG.startNew("medium");
它应该每 300
毫秒调用一次。
实例: http://playclassicsnake.com/play
完整 Javascript: https://github.com/jamkin/Snake/blob/master/SnakeGame/Scripts/game.js
看上面例子中的JS控制台就知道了
The move() function got called!
只印了一次。
我在这里错过了什么?
奖金问题:
在面向对象 Javascript 中创建一个静态 object/function 等价于什么?具体来说,
this.speedMap = { "fast": 100, "medium": 300, "slow": 600 };
在我的对象中对于实例化的每个此类对象都是相同的,因此它应该是 const static
或任何等效的 JS。
替换:
this.snake.move()
有:
this.snake.move
因此,您将拥有:
this.mover = setInterval(this.snake.move, this.speedMap[this.curSpeed]);
setInterval
的第一个参数是一个函数。你不应该调用它。
您的代码在做什么,是将 this.snake.move()
的响应传递给 setInterval