Basics

Property types

Defining and reading properties

this explanation

Upotreba ključne reči this u programskom jeziku Javascript u nekim slučajevima razlikuje od upotrebe u drugim porgramskim jezicima (Java, objektni PHP, C# itd.). U većini slučajeva vrednost ključne reči this se razrešava načinom na koji je neka funkcija pozvana. ECMAScript standard definiše this kao ključnu reč čija je vrednost evaluirana u odnosu na trenutni kontekst izvršavanja programa.

Pre svega potrebno je znati da u Javascriptu postoji tri vrste izvršnog koda. To su: globalni kod, kod funkcije i kod evaluacije. Grubo rečeno, globalni kod predstavlja kod koji se nalazi izvan funkcija, kod funkcije je od unutar deklaracije funkcije. Eval kod je kod je pozvan za evaluaciju. Objekat koji je referenciran ključnom rečju this se uvek odredjuje kada kontrola izvršenja programa predje u drugi kontektst. Stoga, vrednost ključne reči this je odredjena sa vrstom koda koja se izvršava i pozivaocem tog koda.

Kada se programski kod izvršava u globalnom kontekstu, vrednost reči this je globalni objekat. U brauzeru globalni objekat je objekat window, dok je u Node.js program globalni objekat jednostavno global object.

Kada se kontekst izvršavanja programa promeni postoji tri slučaja kada se menja vrednost ključne reči this. To su: poziv metode, poziv funkcije ključnom rečju new i poziv funkcija korišćenjem apply i call.

Kada pozovemo funkciju kao telo polje objekta, vrednost reči this se odnosi na taj objekat. Medjutim ukoliko polje kao funkciju prosledimo u novu varijablu i onda funkciju pozovemo preko te varijable onda se vrednost ključne reči this ne menja. Sledeći primer prikazuje ova dva slučaja.

  var student = {
        brojIndeksa: “11/11”
        prikazi: function() {
            console.log(“Student sa brojem indeksa: ”+this.brojIndeksa);
        }
  }
  student.prikazi();
  var prikaz = student.prikazi;
  prikaz();

U prvom slučaju vrednost reči this je objekat student, dok se u drugom slučaju vrednost ove reči ne menja te je dalje globalni objekat. Na početku izvršavanja programa, vrednost reči this je uvek globalni objekat.

Ukoliko koristimo ključnu reč new kao konstruktor tada se kreira novi objekat i postavlja this na vrednost novokreiranog objekata unutar funkcije koja je pozvana ključnom rečju this.

  function Student(brojIndeksa){
      this.brojIndeksa = brojIndeksa;
   }
  var s1 = new Student(“11/11”);
  var s2 = Student(“11/11”);

U prvom slučaju vrednost reči this unutar funkcije Student je novokreirani objekat, dok je u drugom slučaju reč o običnom pozivu funkcije pa se this odnosi i dalje na globalni objekat.

Javascript ugradjene funkcije call i apply postavljaju eksplicitno vrednost reči this na objekat koji je prosledjen kao prvi argument ove funkcije, dok je drugi argument niz argumenata objekta funkcije na koju this pokazuje. Funkcija apply se ponaša na isti način sa izuzetkom da je da se argumenti prenose pojedinačno a ne kao niz.

Kada direktno pozivamo funkciju eval() vrednost reči this ostaje neizmenjena. U drugom slučaje se odnosi na globalni objekat.

Postoji nekoliko izuzetaka. Na primer, ukoliko se this ključna rec koristi u Funciton.prototype funkcijama onda se this odnosi na vrednost prosledjenu kao argument u tim funkcijama.

Prototype concept

Javascript objekti pored svoji polja imaju i još jedno dodatno polje. To je pokazivač na neki drugi objekat. Ovaj pokazivač nazivamo prototype objekat. Ukoliko pokušamo da pronadjemo neko polje u okviru nekog objekta i to polje se ne pronadje u okviru objekta, Javascript će potražiti to polje u prototype-u. Izvršno okruženje će pratiti lanac uvezanih prototipa sve dok ne naidje na null vrednost. Tada vraća undefined kao povratnu vrednost.

Kada kreiramo objekat korišćenjem Object.create(prot) narednom parameter prot se odnosi na prototype upravo kreiranog objekta. Možemo potražiti vrednost prototype-a nekog objekta naredbom Object.getPrototypeOf. Naredni primer prikazuje kreiranje objekta i prosledjivanje prototype-a.

function student(){
        this.fakultet = "FON";
        this.prikazi = function(){
            alert("Ja sam student FON-a");
        }
    }
    var s = Object.create(Student.prototype);
           Object.getPrototypeOf(s);

Ispod je prikazan način na koji jednu funkciju svim objektima kreiranim pomoći ključne reči new.

student.prototype.getFakultet = function(){    
        return this.fakultet;
  };

U Javascriptu funkcije su objekti. Objekti kao funkcije su povezani sa Function.prototype-om. Svaka objekat funkcije je kreirana sa poljem prototype. Njegova vrednost je objekat sa poljem constructor čija vrednost je funkcija. Pošto su funkcije objekti one se mogu koristiti kao i svi drugi objekti (paramteri drugih funkcija, mogu biti povratna vrednost itd.).

Ukoliko kreiramo novi objekat korišćenjem ključne reči new, taj objekat će posedovati polje proto. Vrednost ovog polja je prototype vrednost funkcije kojom je kreiran objekat. Korišćenjem jedne reči možemo kreirati vise objekata. Svi ti objekti će deliti jedan prototype. Na taj nači menjanjem prototype, promene će automatski naslediti i svi objekti. Prototypes se koriste za realizaciju nasledjivanja u Javascript programskom jeziku.

results matching ""

    No results matching ""