Pourquoi `this` est `undefined` dans ma méthode passée en callback ?
poze 4 months ago152 gadefr
J'ai une classe :
class Compteur {
count = 0;
incr() { this.count++; }
}
const c = new Compteur();
button.addEventListener('click', c.incr);
Au clic : TypeError: Cannot read properties of undefined (reading 'count'). Pourquoi this est perdu ?
Dyagnostik IA
Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.
1 Repons
En JavaScript, this dépend de la façon dont la fonction est appelée, pas de l'endroit où elle est définie. En passant c.incr, tu passes la fonction seule, détachée de c. addEventListener l'appelle ensuite avec this = l'élément (ou undefined en mode strict dans une classe).
Trois solutions :
// 1. bind
button.addEventListener('click', c.incr.bind(c));
// 2. fonction fléchée à l'appel
button.addEventListener('click', () => c.incr());
// 3. champ de classe en fonction fléchée (this lexical)
class Compteur {
count = 0;
incr = () => { this.count++; };
}
La solution 3 est la plus pratique si la méthode sert souvent de callback. Elle crée une fonction par instance, ce qui est négligeable dans la plupart des cas.
Konekte pou di lòt moun si li te mache.
Sign in and verify your email to post an answer.