1

对于下面的代码,我在GameStatsPanel函数的第二行收到以下错误:

“未捕获的类型错误:对象 #Timer 没有方法‘开始’”

我真的很困惑为什么会发生这种情况——我觉得我在某个地方遗漏了一些简单的东西,但我需要开悟。请随时访问 www.letsplayglobalgames.com 并选择“播放!”来查看问题。主页上的选项。如果您需要更多详细信息,请告诉我。

function GameStatsPanel() {
    this.timer = new Timer();
    this.timer.start(); /* error is thrown here */
}
function Timer() {
    this.container = document.getElementById('game_time');
    this.current_flag_time_start;
    this.current_flag_time_stop;
    this.time_start = new Date();
    this.time_stop;
    this.time_difference;
    this.current_flag_time_difference;
}
Timer.prototype.start = function() {
    this.current_flag_time_start = new Date();
}
4

1 回答 1

3

您在有机会使用您的方法设置Timer之前调用构造函数。Timer.prototype

Timer函数是可用的,因为函数声明是“提升的”,因此可以立即使用。

扩展名Timer.prototype不是“提升”的,所以当你做的时候你Timer有一个未修改的..prototypenew Timer

gameStatsPanel = new GameStatsPanel(); // Invoking this too soon. Put it and
// ...                            // anything else that uses the constructors at
                                  // the bottom so the prototypes can be set up.
function main() {
   // ...
}

function GameStatsPanel() {
    this.timer = new Timer(); // The `Timer.prototype` extensions haven't run yet
    // ...
    this.timer.start(); // .start doesn't yet exist
}

// ...

function Timer() {
    // ...
}

// ...

 // *Now* the .start() method is getting added.
Timer.prototype.start = function () {
    this.current_flag_time_start = new Date();
}

// ...
于 2013-02-21T06:59:23.560 回答