1

以下のコードでは、GameStatsPanel関数の 2 行目に次のエラーが表示されます。

「キャッチされていない TypeError: オブジェクト #Timer にメソッド 'start' がありません」

なぜこれが起こっているのか、私は本当にかなり混乱しています-どこかで単純なものが欠けているような気がしますが、啓発が必要です. 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を変更.prototypeしても は変更されませんnew 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 に答える