Всем привет!
Выполняю задачу из урока, нужно было переписать класс "часы", используя прототипное наследование:
function Clock(options) {
'use strict';
this._template = options.template;
this._timer;
}
Clock.prototype._render = function() {
var date = new Date();
var hours = date.getHours();
if (hours < 10) hours = '0' + hours;
var min = date.getMinutes();
if (min < 10) min = '0' + min;
var sec = date.getSeconds();
if (sec < 10) sec = '0' + sec;
var output = this._template.replace('h', hours).replace('m', min).replace('s', sec);
console.log(output);
};
Clock.prototype.stop = function() {
clearInterval(this._timer);
};
Clock.prototype.start = function() {
this._render();
var self = this;
this._timer = setInterval(this._render, 1000);
};
var clock = new Clock({template : 'h : m : s'});
clock.start();
При запуске часов
var clock = new Clock({template : 'h : m : s'});
clock.start(); - они отрабатывают один раз, а далее - ошибка - Cannot read property 'replace' of undefined.
Если же заменить this.render в setInterval на self.render и обернуть в анонимную функцию - часы работают бесконечно, а не только один раз
Почему же так происходит? Почему this верен только при первом срабатывании функции? Запутался