Привет, я создал следующий класс:
class Temporizador {
constructor() {
this.tiempo = 0;
}
getTime() {
return this.tiempo;
}
init() {
console.log(n);
document.getElementById('countdown').innerHTML = this.tiempo;
this.tiempo++;
setInterval(console.log(this.init()), 1000);
}
}
И чтобы создать его экземпляр:
var temporizador = new Temporizador();
temporizador.init();
Я получил это из этой идеи: https://codepen.io/ evilnapsis / pen / wBZBgv
Проблема у меня возникла, потому что она в основном дает мне эту ошибку
Uncaught RangeError: Превышен максимальный размер стека вызовов
И, кроме того, я даже не получаю счетчик, вдруг я получаю 11432
AquГ - есть несколько проблем:
init
внутри setInterval
. setInterval
estГЎs называя init
снова, из-за каждой секунды estarГЎs создавая другой различные setInterval
. this
. Одна из правильных форм делания этого следующей serГ-:
class Temporizador {
constructor() {
this.tiempo = 0;
}
getTime() {
return this.tiempo;
}
init() {
var self = this;
setInterval(function() {
self.tiempo++;
document.getElementById('countdown').innerHTML = self.tiempo;
}, 1000);
}
}
var temporizador = new Temporizador();
temporizador.init();
<div id="countdown">0</div>
FГ-jate, что внутри setInterval
у нас есть две линии cГіdigo, которые нам изменяет стоимость счетчика и показывает результат.
Проблема в тебе cГіdigo приходит тебя funciГіn 'init ()'.
В этой lГ-nea setInterval(console.log(this.init()), 1000);
estГЎs входя в цикл, в котором каждая секунда ты верил бы в новый интервал, и ademГЎs ты пробуешь печатать в консоли один результат одной funciГіn, что ничего не возвращает.
я создал этот cГіdigo, где я упорядочиваю ты funciГіn и ademГЎs, увеличиваю класс для aГ±adir одна funciГіn с которой останавливать temporizador.
class Temporizador {
constructor() {
this.tiempo = 0;
this.interval;
}
getTime() {
return this.tiempo;
}
init() {
this.interval = setInterval(() => {
this.tiempo++;
document.getElementById('countdown').innerHTML = this.tiempo;
console.log(this.tiempo)
}, 1000);
}
stop() {
clearInterval(this.interval)
}
}
const timer = new Temporizador();
timer.init();
<span id="countdown">0</span>
В классе temporizador я нахожусь aГ±adiendo переменная 'interval', в 'init ()' инициализировался interval и внутри того же самого aГ±ado cГіdigo, который я хочу, чтобы работала каждая секунда, что serГ - в:
В funciГіn 'stop ()' просто удалил 'interval'
Я надеюсь, что он подает тебе
У тебя есть плохо эта часть cГіdigo:
init() {
console.log(n);
document.getElementById('countdown').innerHTML = this.tiempo;
this.tiempo++;
setInterval(console.log(this.init()), 1000);
}
Призыв к console.log(this.init())
немедленный, потому что результат Ваш ejecuciГіn - то, что entregarГЎ как parГЎmetro в setInterval()
, вызывая бесконечный цикл.
AdemГЎs кажется, что то, что ты хочешь, состоит в том, чтобы называть каждую секунду init()
, из-за которого serГ - в один setTimeout()
или иначе crearГ - в новый интервал в каждом вызове, заканчивая тем, что насыщая браузер temporizadores.
init() {
console.log(n);
document.getElementById('countdown').innerHTML = this.tiempo;
this.tiempo++;
setTimeout(() => console.log(this.init()), 1000);
}
Сейчас мы происходим как parГЎmetro одна funciГіn anГіnima, что serГЎ выполненная вслед за 1000 м.
this.init()
не будет функционировать, despué s из-за каждой секунды, которую он перемещает, ты вновь создаешь интервал.
– Eugeni Bejan
08.11.2019, 01:05
this
, из-за чего он идет, он бросит ошибку this.init
это не funció n.
– Eugeni Bejan
08.11.2019, 01:24