Reference u JavaScriptu

Za razliku od običnih vrednosti, tipa string ili broj, objekte ne možemo bukvalno da "smestimo" u promenljivu. Kada promenljivoj "dodelimo" objekat, ta promenljiva je samo referenca na njega.

Naravno, u praktičnom radu sa objektom, nećemo primetiti razliku, ali moramo da pamtimo da referenca samo pokazuje na objekat u memoriji. Ona je u stvari adresa objekta, pre nego sam objekat.

var promenljiva = vrednost; var referenca = objekat;

Često i nismo svesni koliko koristimo reference dok programiramo u JavaScriptu. Svaka promenljiva preko koje pozivamo objekat je referenca. Reference se koriste i kada funkciji prosleđujemo objekat putem parametara. Čak i na same funkcije možemo praviti reference.

Međutim, reference kriju jednu opasnu osobinu, koja nas može skupo koštati ako je ikada zaboravimo: referenca na referencu ne pokazuje na novi, već na originalni objekat!

Evo kako to funkcioniše sa promenljivama:

var p = vrednost; var p1 = p;

Promenljiva p1 je kopija promenljive p. Inicijalno one imaju istu vrednost, ali su suštinski nezavisne - šta god uradili sa promenljivom p1, neće se odraziti na promenljivu p.

Sa druge strane, slična situacija, ali kada umesto vrednosti koristimo objekat:

var r = objekat; var r1 = r;

Promenljiva r je referenca na objekat. Promenljiva r1 je kopija promenljive r, ali u smislu da samo pokazuje na isti objekat. To znači da su obe promenljive reference na isti objekat. Ako menjamo svojstva "objekta" r1, to će se odraziti i na "objekat" r.

Primer za reference

Da se oslonimo na primer od malopre


  var x = 10;   // promenljiva x dobija vrednost
  var y = x;    // promenljiva y dobija istu tu vrednost
  
  y = y+1;      // povećali smo vrednost y za 1 - to ne utiče na promenljivu x

  var pasus = document.getElementById("prvi");   // pasus je referenca na objekat
  var ref = pasus;                               // ref je takođe referenca na objekat
  
  ref.style.color = "#900";       // šta god radili sa ref, odraziće se i na pasus

  ref = null;    // poništavamo referencu ref
		

Dakle kreirali smo referencu pasus na HTML elemenat "prvi". Onda smo "dodelili vrednost" promenljivoj ref. Jedino što je to potpuno drugačije u odnosu na rad sa promenljivama x i y koje sadrže "primitivne" vrednosti.

I pasus i ref pokazuju na isti objekat u memoriji (tj. u dokumentu) i samim tim, sve što radimo sa objektom ref, dešava se i objektu pasus, jer su to u stvari reference na jedan isti objekat.

Konačno, u poslednjoj naredbi dodeljujemo referenci ref "nulti" objekat. Vrednost null je za objekte ono što je 0 (nula) za brojeve ili "" (prazan string) za stringove. Ovo ne znači da smo "obrisali" objekat - samo smo ukinuli referencu na njega - i dalje mu možemo pristupati preko reference pasus.

Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.