this એ ફંક્શન ક્યાં વ્યાખ્યાયિત થયું છે તેના પર નહીં, પણ તેને કેવી રીતે CALL કરવામાં આવે છે તેના પર નક્કી થાય છે. પાંચ નિયમો છે:
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this એ ફંક્શન ક્યાં વ્યાખ્યાયિત થયું છે તેના પર નહીં, પણ તેને કેવી રીતે CALL કરવામાં આવે છે તેના પર નક્કી થાય છે. પાંચ નિયમો છે:
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
તીર ફંક્શનોમાં કોઈ પોતાનો this નથી — તેઓ તેને વ્યાખ્યા સમયે બંધ રેંજમાંથી લેતા હોય છે. આ કારણે તીર કૉલબેક્સ માટે પરફેક્ટ છે:
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); });
},
};
કૉલબેક તરીકે મેથડ પાસ કરવું તેની બંધન ગુમાવે છે, કારણ કે પછી તેને સાદા રીતે કૉલ કરવામાં આવે છે:
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 ને ગીણવું JS માં સૌથી સામાન્ય બગ છે.
સુધાર સામાન્ય રીતે તીર ફંક્શન અથવા .bind() છે જેથી ઇચ્છિત this ને લૉક કરી શકાય.