this ditentukan oleh cara sesuatu fungsi DIPANGGIL, bukan di mana ia ditakrifkan. Terdapat lima peraturan:
js
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
this ditentukan oleh cara sesuatu fungsi DIPANGGIL, bukan di mana ia ditakrifkan. Terdapat lima peraturan:
obj = {
: ,
() { .; },
};
obj.();
f = obj.;
();
f.(obj);
();
Arrow function tiada this sendiri — ia mewarisi this daripada skop yang melingkunginya pada masa takrifan. Inilah sebabnya arrow function sangat sesuai untuk callback:
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); });
},
};
Menghantar sesuatu method sebagai callback akan menghilangkan pengikatannya, kerana ia kemudiannya 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 faham tentang this adalah salah satu pepijat JS yang paling biasa.
Pembetulannya biasanya ialah arrow function atau .bind() untuk mengunci this yang dikehendaki.
Pustaka soalan temu duga IT dengan jawapan terperinci — daripada Junior hingga Senior.
Derma