我有一个像
一样的对象/功能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控制台并查看
调用了move()函数!
仅打印一次。
我在这里缺少什么?
奖金问题:
在面向对象的Javascript中制作静态对象/函数的等价物是什么?具体来说,
this.speedMap = { "fast": 100, "medium": 300, "slow": 600 };
对于每个实例化的对象,我的对象中的都是相同的,所以它应该是const static
或者等同于JS的对象。
答案 0 :(得分:3)
替换:
this.snake.move()
使用:
this.snake.move
所以,你将拥有:
this.mover = setInterval(this.snake.move, this.speedMap[this.curSpeed]);
setInterval
的第一个参数是一个函数。你不应该叫它。
您的代码正在做的是将响应从this.snake.move()
传递到setInterval