@AlikDex

Setinterval в классе JS, как заставить работать?

Время на сервере с тикающими часами формата
18 Ноября, 2016 11:32:07

<script type="text/javascript">
class ServerTime {

	constructor(server_time) {
		this.montharray = new Array("Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Октября","Ноября","Декабря");
		this.clockContainer = document.querySelector('#clock');

		var localTime = +Date.now();
		var serverTime = new Date(server_time);
		this.timeDiff = serverTime - localTime;

		this.init(); // инициировать таймер при создании объекта
	}

	init () {
		setInterval(this.renewClock(), 1000); // Не пашет
	}

	padlength (what) {
		var output=(what.toString().length == 1)? '0' + what : what;
		return output;
	}

	renewClock () {
	    var realtime = +Date.now() + this.timeDiff;

	    var date = new Date(realtime);

		var datestring = this.padlength(date.getDate()) + " " + this.montharray[date.getMonth()] + ", " + date.getFullYear();
		var timestring = this.padlength(date.getHours()) + ":" + this.padlength(date.getMinutes()) + ":" + this.padlength(date.getSeconds())

		this.clockContainer.innerHTML = datestring + " " + timestring;
	}
}
clock = new ServerTime('<?= date("F d, Y H:i:s", time());?>'); // с пхп отдается время и дата сервера.
//setInterval(function() { clock.renewClock() }, 1000); // При раскоментировании время начинает работать.
</script>

Вот. В таком виде не работает, а если завести вне класса, то вполне себе пашет. Собственно и вопрос, как запустить счетчик внутри класса то?
  • Вопрос задан
  • 1463 просмотра
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
init () {
    setInterval(() => {
       this.renewClock();
    }, 1000); // Пашет
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Stepanya
замените
setInterval(this.renewClock(), 1000); // Не пашет
на
setInterval(function(){
  this.renewClock.call(this);
}, 1000); // Пашет
Ответ написан
this.foo() - вызов функции
this.foo - ссылка на функцию
Все ваши ошибки от этого.
И почитайте про bind, apply, this или используйте стрелочные функции, они сохраняют контекст (this).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы