Šta je this u JavaScript-u?
sobes.tech АИ
Одговор од АИ
this u JavaScript-u je ključna reč koja označava kontekst izvršavanja funkcije. Njegova vrednost se određuje u zavisnosti od načina na koji se funkcija poziva.
Obično, this ukazuje na globalni objekat (u pretraživaču window) u slučaju običnog poziva funkcije, osim u režimu stroge kontrole.
U režimu stroge ('use strict') u istom scenariju, this će biti undefined.
Prilikom poziva metode objekta, this se odnosi na sam objekat.
const obj = {
method: function() {
console.log(this); // obj
}
};
obj.method();
Prilikom korišćenja konstruktora (new sa funkcijom), this ukazuje na novi kreirani primer objekta.
function Constructor() {
console.log(this); // primerak Constructor-a
}
const instance = new Constructor();
Prilikom korišćenja metoda call, apply, bind, this se eksplicitno postavlja kao prvi argument.
function greet() {
console.log(`Zdravo, ${this.name}!`);
}
const person = { name: 'Alica' };
greet.call(person); // Zdravo, Alica!
greet.apply(person); // Zdravo, Alica!
const boundGreet = greet.bind(person);
boundGreet(); // Zdravo, Alica!
U funkcijama strelice (Arrow Functions) this nema sopstveni kontekst. Leksički se nasleđuje iz okruženja u kojem je definisana.
const obj2 = {
name: 'Bob',
greet: function() {
const arrowGreet = () => {
console.log(`Zdravo od ${this.name}!`); // this se odnosi na obj2
};
arrowGreet();
}
};
obj2.greet(); // Zdravo od Bob!
const obj3 = {
name: 'Charlie',
greet: () => {
console.log(`Zdravo od ${this.name}!`); // this se odnosi na window (ili undefined u režimu stroge), ne na obj3
}
};
obj3.greet(); // Zdravo od undefined! (ili greška)
Kontekst this može biti nejasan, posebno prilikom prosleđivanja callback funkcija ili u asinhronim operacijama. Razumevanje pravila this je ključno za ispravno funkcionisanje JavaScript-a.