Класс таймера - не удается найти переменную

Я новичок в JavaScript и объектно-ориентированном программировании. Я пытаюсь создать объект Timer (я предполагаю, что это объект?).

Мой объект не работает, я получаю следующую ошибку: «ReferenceError: не удается найти переменную: countdownTime» (снова и снова).

Мой объект должен создать таймер обратного отсчета. У пользователя есть возможность задать количество времени обратного отсчета (в секундах), от которого отсчитывает таймер (свойство моего объекта). Пользователь также может запускать и останавливать мой таймер (методы). Таймер автоматически останавливается на 0, но может быть остановлен пользователем раньше (пример: пользователь теряет все жизни, а время еще есть - таймер должен закончиться).

Почему это не работает, как ожидалось?

Скрипт: http://jsfiddle.net/bkWTS/

Код:

<div id="output"></div>

<script>
// Timer object
var Timer = function() {

    // PROPERTIES
    this.countdownTime = 120; // amount of time the timer counts down from in seconds

    // METHODS
    // Start timer - starts the countdown timer
    this.Start = function() {
        var timer = setInterval(timerCall, 1000);
    };

    // End timer
    // timer automatically ends when countdown time reaches 0 BUT can be ended early 
    // Example: User looses all lives and there is still time remaining - timer should end
    this.End = function() {
        // Stop timer
        clearInterval(timer);
    };

    function timerCall() {          
        if (countdownTime > 0) {
            // Display time in output div
            document.getElementById("output").innerHTML = countdownTime;

            countdownTime--;    
        } else {
            // Stop timer
            clearInterval(timer);
        }
    }

};

// Create new timer object
var myTimer = new Timer();

// Countdown from 30
myTimer.countdownTime = 30;

// Start the countdown
myTimer.Start();
</script>

person user1822824    schedule 02.02.2013    source источник


Ответы (1)


Вы не можете видеть свою переменную, потому что вы должны ссылаться на нее как

this.countdownTime = ...

Сделайте следующее в своем классе:

var self = this;

Затем в функции timerCall вы делаете

self.countdownTime = ...

Это должно решить проблему с обратным отсчетом :)

person elydelacruz    schedule 29.09.2013