Deo zbornika Učimo Javascript

Objekti u Javascriptu

U širem smislu, objekat je svaki složen podatak u Javascriptu (uključujući funkcije i nizove). U užem smislu, objekat je struktura sastavljena od parova ključeva i vrednosti.

Na primer:

const bicikl = {
  brojTockova: 2,
  proizvodjac: "Sportiko",
  elektricni: true
}

Postoje dva načina za pristup svojstvu objekta:

  • pomoću uglastih zagrada - na primer, bicikl['proizvodjac']
  • pomoću tačke - na primer, bicikl.proizvodjac

Notacija tačke je jednostavnija za čitanje i pisanje, ali se ne može uvek koristiti. Ako naziv svojstva objekta nije validan naziv promenljive (npr. ima razmak), moramo koristiti uglaste zagrade.

Upotreba reči this

Objekat može sadržati funkcije, koje se onda nazivaju metode. Ključna reč this unutar metode ukazuje na njenog vlasnika, odnosno objekat kojem metoda pripada:

const covek = {
  name: 'Aragorn',
  kaziIme () {
    console.log('Moje ime je ' + this.name)
  }
}

covek.kaziIme()

Dakle, kada koristimo rezervisanu reč this, mi ukazujemo na „ovaj objekat“.

Referenciranje objekta

Kada objekat dodelimo drugoj promenljivoj, mi pravimo novi pokazivač ka istom objektu, a ne kopiju. Zato, kad menjamo referencu, zapravo menjamo original. Na primer:

const original = {
  brojac: 1
}
const kopija = original // zapravo ne kopira objekat

kopija.brojac = 100
console.log(original.brojac) // original je izmenjen

Isto se dešava kada objekat prosledimo funkciji:

const original = {
  brojac: 100
}

function reset(obj) {
  obj.brojac = 0
}

reset(original)
console.log(original.brojac) // original je izmenjen

Kopiranje objekta

Ako želimo da dubinski prekopiramo objekat, a ne samo da napravimo novu referencu, možemo koristiti destruktuiranje. Na primer:

const original = {
  brojac: 1
}
const kopija = {...original} // dubinski kopira objekat

kopija.brojac = 100
console.log(original.brojac) // original je neizmenjen

Poređenje objekata

Kada upoređujemo objekte, dobićemo true samo ako uporedimo dve reference na isti objekat. Ako uporedimo dva različita objekta koji sadrže ista svojstva, rezultat će biti false. Na primer:

const zuta = {rasa: 'pas'}
const sparki = {rasa: 'pas'}

console.log(sparki == zuta)

Međutim, ako kreiramo novu promenljivu i dodelimo joj postojeći objekat, ona onda ukazuje na isti objekat:

const sparki = {rasa: 'pas'}
const mojPas = sparki

console.log(mojPas === sparki)

U ovom slučaju mojPas je sparki, zato što obe promeljive pokazuju na isti objekat u memoriji.

Literatura

  • Ved Antani, Stojan Stefanov, Objektno-orjentisan JavaScript, Beograd, 2017.