Deo zbornika Napredni Javaskript

Konstruktorske funkcije

Konstruktorske funkcije su, pre uvođenja klasa, bile jedini način za pisanje objektno-orjentisanog Javascripta.

Sintaksa je sledeća:

function Heroj() {
  this.zanimanje = 'ratnik'
}

const covek = new Heroj()

console.log(covek.zanimanje)

Da bismo kreirali objekat pomoću konstruktor funkcije, koristimo new operator.

Prihvatanje parametara

Konstruktorske funkcije mogu primati parametre. Na primer, možemo dodati parametar ime i dodeliti ga svojstvu ime. Na taj način možemo kreirati više različitih objekata pomoću istog konstruktora:

function Heroj(ime) {
  this.ime = ime
  this.zanimanje = 'ratnik'
}

const heroj1 = new Heroj('Aragorn')
const heroj2 = new Heroj('Boromir')

console.log(heroj1.ime)
console.log(heroj2.ime)

Po pravilu, naziv konstruktora treba pisati velikim slovom. To je konvencija da bismo konstruktore razlikovali od običnih funkcija.

Dodavanje metoda

function Heroj(ime) {
  this.ime = ime
  this.zanimanje = 'ratnik'

  this.pozdrav = function () {
    console.log("Zdravo ja sam " + this.ime + " i ja sam " + this.zanimanje)
  }
}

const heroj = new Heroj('Aragorn')
heroj.pozdrav()

Česte greške

Ako pozivamo funkciju koja je namenjena da bude konstruktor, a izostavimo operator new, to tehnički nije greška. Međutim, nećemo dobiti očekivani rezultat:

const heroj = Heroj('Aragorn')
typeof heroj // "undefined"

Šta se desilo ovde? Nema operatora new, pa novi objekat nije kreiran. Konstruktor je pozvan kao obična funkcija, a pošto nema naredbe return, implicitno vraća undefined.

Literatura

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