2017-02-15 11 views
0

Clockクラスのインクリメントとチックのデバッグに問題があります。 Clockのsecondsプロパティは毎秒1ずつインクリメントする必要がありますが、秒単位でNaNエラーが発生します。私のメソッドで "Seconds:NAN"が表示されるのはなぜですか?

増分の目標は、呼び出されるたびにClockインスタンスの秒数を1増やすことです。 Tickは、これを可能にするために1秒ごとにインクリメント方法を呼び出します。

function Clock() { 
    this.seconds = 0; 
} 

Clock.prototype.increment = function() { 
    this.seconds = this.seconds + 1; 
    console.log('Seconds: ' + this.seconds); 
}; 

Clock.prototype.tick = function() { 
    setInterval(this.increment, 1000); 
}; 

var timex = new Clock(); 

timex.tick(); 

答えて

0

問題は、そのあなたのsetIntervalハンドラ内、thisもはやポイントあなたのClock対象に、しかしグローバルな名前空間にあります。最も簡単な解決策はただthis.incrementthisをバインドすることです:

Clock.prototype.tick = function() { 
    setInterval(this.increment.bind(this), 1000); 
}; 

も参照してください:Javascript setInterval and `this` solution

+0

重複の質問に答えないでください。重複して閉じるに投票してください。 –

+0

@MikeMcCaughanちょうど投票に投票しましたが、OPにも解決策がある方が簡単です。 – mc10

+0

...彼らは複製から得るだろう。それとも、簡単なコメントです。その質問に答えることで、質問を削除する可能性が減ります。 –

0

thisは、setTimeoutで呼び出したときのウィンドウです。

setInterval(this.increment.bind(this), 1000); 
関連する問題