创建新对象时,Hangman-Timer速度增加(JavaScript)

时间:2014-04-23 12:23:02

标签: javascript html function timer

目前正在编程Hangman,我遇到以下问题:

当我创建一个新的HangmanController(选择一个新单词,...)时,计时器工作正常,唯一的事情是,当我再创建一个HangmanController时,速度快2倍,当我再创建一个HangmanController 3x时,等等 我只在

时创建一个HangmanController

问题出在哪里?或者我怎样才能让计时器更好?

//这里是我创建一个新的HangmanController的地方。当用户更改难度(按HTML中的按钮)时会发生这种情况

function inithm(difficulty) {
    hm = new HangmanController();
    hm.hmModel.reset(hm.displayedWord.word, false, difficulty);
    UsedLetters();
};

//构造

HangmanController = function() {
    this.hmModel = new HangmanModel();
    //this.hmView = new HangmanView(document.getElementById('hm_view'));
    this.displayedWord = new DisplayedWord();
    this.userGuessField = document.getElementById('guessfield');
    this.userGuessField.focus();
    this.guessbutton = document.getElementById('guessbutton');
    this.guessbutton.disabled = false;
    /*this.updateTime = function(stopwatch) {
        var e = stopwatch.getElapsed();
        document.getElementById('stopwatch').innerHTML = e.hours * 60 + e.minutes + ' mins' + e.seconds + ' secs';
    };*/
    this.stopwatch = new Stopwatch();
};

//计时器,只在这里调用,其他地方(在setInterval处)

Stopwatch = function() {
    this.sek = 0;
    setInterval(function() {timer();}, 1000);
};

function timer() {
    document.getElementById('stopwatch').innerHTML = this.hm.stopwatch.sek;
        this.hm.stopwatch.sek++;
}

Stopwatch.prototype.stop = function() {
    document.getElementById('stopwatch').innerHTML = 0;
};

1 个答案:

答案 0 :(得分:1)

您正在为每个Stopwatch创建多个HangmanController实例,并且每个人都会每秒调用一次timer(),这会导致您的#stopwatch元素每秒增加一次,而不是每秒一次; - )

编辑:您应该在创建新HangmanController之前处置旧的HangmanController(尤其是秒表功能),或者只创建一个{{1}}的实例,并且制作重启或难度变化等方法。