this inapatikana kulingana na jinsi kitendaji kinaitwa, si mahali ambapo kinafafanuliwa. Kuna kanuni tano:
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this inapatikana kulingana na jinsi kitendaji kinaitwa, si mahali ambapo kinafafanuliwa. Kuna kanuni tano:
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
Kitendaji cha mshale haina this yake mwenyewe — kinairithi kutokana na scope inayoizunguka wakati wa ufafanuzi. Hii ndiyo sababu mishale ni bora kwa 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); });
},
};
Kupitisha njia kama callback kupoteza urafiki wake, kwa sababu inaitwa tu kwa kawaida:
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
Kufahamu vibaya this ni moja ya matatizo ya kawaida ya JS.
Suluhisho ni kawaida kitendaji cha mshale au .bind() kukamatia this inayolengwa.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia