2017-02-15 9 views
0

У меня возникли проблемы с отладкой методов приращения и тика моего класса Clock. Свойство seconds Clock должно увеличиваться на 1 каждую секунду, но вместо этого секунда бросает ошибку NaN.Почему мой метод печатает «Секунды: NAN»

Целью инкремента является увеличение секунд экземпляра Clock на 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 объекта, но в глобальном пространстве имен. Самым простым решением является просто привязать к thisthis.increment:

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);