Sobes.tech
Middle

Na koje načine može da se promeni kontekst objekta u JavaScript-u?

sobes.tech АИ

Одговор од АИ

Postoji nekoliko osnovnih načina za promenu konteksta (this) objekta u JavaScript-u:

  1. call(): Izvršava funkciju sa datim kontekstom i argumentima, prosleđenim pojedinačno.

    // Primer sa call()
    const obj = { vrednost: 42 };
    function prikaziVrednost() {
        console.log(this.vrednost);
    }
    prikaziVrednost.call(obj); // Ispisaće 42
    
  2. apply(): Izvršava funkciju sa datim kontekstom i argumentima prosleđenim kao niz ili pseudo-niz.

    // Primer sa apply()
    const obj = { vrednost: 100 };
    function saberi(a, b) {
        console.log(this.vrednost + a + b);
    }
    saberi.apply(obj, [5, 10]); // Ispisaće 115
    
  3. bind(): Vraća novu funkciju, čiji je kontekst fiksiran na zadati objekat. Originalna funkcija se ne poziva odmah.

    // Primer sa bind()
    const obj = { vrednost: 200 };
    function pozdrav() {
        console.log("Zdravo iz " + this.vrednost);
    }
    const vezaniPozdrav = pozdrav.bind(obj);
    vezaniPozdrav(); // Ispisaće "Zdravo iz 200"
    
  4. Strelaste funkcije (=>): Nemaju sopstveni kontekst this. Nasleđuju kontekst iz leksičkog okruženja u kojem su definisane (tj. iz roditeljskog opsega).

    // Primer sa strelastom funkcijom
    const obj = {
      vrednost: "objekat",
      prikaziVrednost: function() {
        const strelaFunkcija = () => {
          console.log("Iz strela funkcije: " + this.vrednost); // this se odnosi na obj
        }
        strelaFunkcija();
      }
    };
    obj.prikaziVrednost(); // Ispisaće "Iz strela funkcije: objekat"
    
  5. Javno prosleđivanje konteksta putem poziva kao metoda objekta: Kada se funkcija pozove kao metoda objekta (obj.metoda()), kontekst this postaje sam objekat (obj).

    // Primer sa pozivom kao metoda
    const obj = {
        vrednost: "metoda objekta",
        prikazi: function() {
            console.log(this.vrednost);
        }
    };
    obj.prikazi(); // Ispisaće "metoda objekta"
    
  6. Javno prosleđivanje konteksta putem konstruktora (new): Kada se koristi operator new za kreiranje novog primera objekta, kontekst this unutar konstruktora se odnosi na kreirani primer.

    // Primer sa konstruktorom
    function MyObject(vrednost) {
        this.vrednost = vrednost; // this se odnosi na novi primer
    }
    const instanca = new MyObject("konstruktor");
    console.log(instanca.vrednost); // Ispisaće "konstruktor"
    

Ovi načini omogućavaju upravljanje onim na šta se odnosi ključna reč this unutar funkcije, što je ključno za pravilno rukovanje objektima i metodama u JavaScript-u.