this, bir fonksiyonun NEREDEN çağrıldığı değil NASIL çağrıldığı tarafından belirlenir. Beş kural vardır:
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this, bir fonksiyonun NEREDEN çağrıldığı değil NASIL çağrıldığı tarafından belirlenir. Beş kural vardır:
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
Ok fonksiyonlarının kendi this değeri yoktur — tanım zamanında çevreleyen scope'tan miras alırlar. Bu yüzden oklar callback'ler için mükemmeldir:
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); });
},
};
Bir metodu callback olarak geçmek bağlantısını kaybettirir, çünkü sonra düz şekilde çağrılır:
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
this yanlış anlamak, en yaygın JS hatalarından biridir.
Çözüm genellikle bir ok fonksiyonu veya amaçlanan this değerini kilitlemek için .bind()'dir.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap