this ditentukan oleh bagaimana sebuah fungsi DIPANGGIL, bukan di mana ia didefinisikan. Ada lima aturan:
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this ditentukan oleh bagaimana sebuah fungsi DIPANGGIL, bukan di mana ia didefinisikan. Ada lima aturan:
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
Arrow function tidak memiliki this sendiri — mereka mewarisinya dari scope yang membungkus pada waktu definisi. Inilah mengapa arrow sempurna untuk 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); });
},
};
Meneruskan sebuah method sebagai callback kehilangan ikatannya, karena kemudian dipanggil secara biasa:
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
Salah memahami this adalah salah satu bug JavaScript yang paling umum.
Penyelesaiannya biasanya adalah arrow function atau .bind() untuk mengunci this yang dimaksud.
Perpustakaan pertanyaan wawancara IT dengan jawaban mendetail — dari Junior hingga Senior.
Donasi