this हे फंक्शन कसे CALL होते यावर अवलंबून ठरते, ज्या जागी ते परिभाषित होते त्या जागी नाही. पाच नियम आहेत:
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this हे फंक्शन कसे CALL होते यावर अवलंबून ठरते, ज्या जागी ते परिभाषित होते त्या जागी नाही. पाच नियम आहेत:
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
Arrow फंक्शनचा स्वतःचा this नसतो — ते परिभाषा वेळी परिवेशाकडून वारसाने मिळतो. हेच कारण आहे की arrows 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); });
},
};
मेथड callback म्हणून पास करणे त्याचे binding हरवते, कारण ते नंतर सरळ call होते:
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 bugs पैकी एक आहे.
उपाय सामान्यतः arrow function किंवा .bind() असतो ज्याचे उद्दिष्ट this ला लॉक करायचे असते.
सविस्तर उत्तरांसह IT मुलाखत प्रश्नांचे ग्रंथालय — Junior पासून Senior पर्यंत.
देणगी द्या