Sobes.tech
Junior

Š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.