Boa noite, Dorô! Como vai?
Quem perde o contexto não é o setInterval()
e sim a função que vc está passando pra ele. Para solucionar esse problemas vc pode usar arrow functions que é um recurso que surgiu no ES6 justamente pra resolver questões assim ou então usar o método bind()
. Segue um código para exemplificar essas possibilidades.
// Com arrow function
class Relogio {
constructor(){
this._segundos = 0;
setInterval(() => {
console.log(++this._segundos);
}, 1000);
}
}
var r = new Relogio();
Obs.: Como a arrow function tem apenas uma linha de código, ainda poderiam ser omitidas as chaves que definem o corpo da função e o ponto e vírgula ao final da única instrução console.log()
.
// Com bind()
class Relogio {
constructor(){
this._segundos = 0;
setInterval(function () {
console.log(++this._segundos);
}.bind(this), 1000);
}
}
var r = new Relogio();
Pegou a ideia? Qualquer coisa é só falar!
Grande abraço e bons estudos!