为什么我的 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