Essayer de créer une boucle de temporisation dans TypeScript:
timeout() {
setTimeout(function () {
console.log('Test');
this.timeout();
}, 1000/60);
}
Mais après que la première boucle fonctionne correctement, j'obtiens cette erreur: "Uncaught TypeError: this.timeout n'est pas une fonction". Il semble que la variable this n'existe pas après la boucle initiale. Des idées?
Parce que votre this
ne fait pas référence à l'objet. Chaque fonction a son propre ça. Ainsi, votre this
est celui qui est défini par une fonction anonyme à l'intérieur de la setTimeout()
.
Pour faire fonctionner votre programme, vous devez maintenir le this
avant le délai d'expiration et utiliser à travers cette variable.
class Test {
timeout() {
var that = this;
setTimeout(function () {
console.log('Test');
that.timeout();
}, 1000/60);
}
}
let t = new Test();
t.timeout();
Ou vous pouvez travailler avec lambda functions
, qui gardera le this
dans votre objet. Le Lamda
de this
fera référence au this
de l'outreur, qui appelle la fonction lambda`.
class Test {
timeout() {
setTimeout(() => {
console.log('Test');
this.timeout();
}, 1000/60);
}
}
let t = new Test();
t.timeout();
À cause de ce contexte est perdu. Utilisez la fonction flèche, c'est mieux.
timeout() {
setTimeout(() => {
console.log('Test');
this.timeout();
}, 1000/60);
}