0

Javascriptでタイマーを作成しようとしていますが、その実装方法に特定の問題があります。

今はこんな感じです

function CountUpTimer(seconds,name,targetId,submitButtonId){
this.time = seconds; 
this.currentTime = 0;
this.minutes = Math.floor(seconds/60);
this.submitButtonId = submitButtonId;

this.seconds = seconds - this.minutes*60;
this.currentSeconds = 0;
this.currentMinutes = 0; 
this.targetId = targetId;
this.name = name;
this.isPaused = false; 
this.init = function(){
    setInterval(this.name + ".tick()",1000);
}

this.pause = function(){
    this.isPaused = true;
}
this.unpause = function(){
    this.isPaused = false; 
}
this.tick = function(){
    if(this.isPaused == false){
    if(this.currentTime <= this.time){
        if(this.currentSeconds == 59){
            this.currentSeconds = 0;
            this.currentMinutes++; 
        }
        this.updateTimer();
        this.currentTime++;
        this.currentSeconds++;
    } else{
        this.endTiming();
    }
}
}

ここでの問題は、CountUpTimerオブジェクトを動的に作成できないことです。これは、そのオブジェクトに割り当てている変数の名前を知る必要があるためです。これを回避する方法はありますか?

setInterval(this.tick(),1000);

4

3 に答える 3

2

コールバックを使用すると、実行時にコンテキストが失われます。bindコンテキストを維持するために使用する必要があります。

setInterval(this.tick.bind(this),1000);

詳細はこちら

于 2012-12-03T09:06:39.053 に答える
1
this.init = function(){
   var self = this;
   setInterval(self.tick(),1000);
}

setIntervalでこれを使用すると、間違ったオブジェクトコンテキスト(ドキュメント)になるため、元のオブジェクトへの参照を保持します。

于 2012-12-03T09:08:47.350 に答える
0

できるよ:

var self = this;
setInterval(function() {
    self.tick()
}, 1000);

またはFunction.bind、レガシー以外のサポートで問題がない場合に使用します。

于 2012-12-03T09:12:04.563 に答える