this est déterminé par comment une fonction est APPELÉE, pas où elle est définie. Il existe cinq règles :
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this est déterminé par comment une fonction est APPELÉE, pas où elle est définie. Il existe cinq règles :
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
Les arrow functions n'ont pas de propre this — elles l'héritent de la portée englobante au moment de la définition. C'est pourquoi les arrows sont parfaites pour les callbacks :
const obj = {
items: [1, 2],
logAll() {
// ✅ arrow inherits `this` from logAll → `this` is obj
this.items.forEach(i => console.log(this.items, i));
// ❌ a regular function here would have its own `this` (undefined) → crash
// this.items.forEach(function (i) { console.log(this.items); });
},
};
Passer une méthode en tant que callback perd sa liaison, car elle est alors appelée simplement :
button.addEventListener("click", obj.getX); // ❌ `this` is the button
button.addEventListener("click", () => obj.getX()); // ✅ keeps obj
button.addEventListener("click", obj.getX.bind(obj)); // ✅ also fine
Méconnaître this est l'un des bugs JS les plus courants.
La correction est généralement une arrow function ou .bind() pour verrouiller le this prévu.
Une bibliothèque de questions d'entretien IT avec des réponses détaillées — du Junior au Senior.
Faire un don