Pourquoi `this` est `undefined` dans ma méthode passée en callback ?
asked 4 months ago154 viewsfr
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 ?
AI diagnosis
AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.
1 Answer
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.
Sign in to tell others whether this worked.
Sign in and verify your email to post an answer.