Deo zbornika Napredni Javaskript
Svojstvo prototype
Funkcije u JavaScriptu su zapravo objekti, koji sadrže metode i svojstva.
Neke od metoda su call()
, apply()
i bind()
, a svojstva su length
, constructor
i prototype
. Svojstvima funkcije možemo pristupiti na isti način kao svojstvima objekta. Na primer:
function kvadriraj(a, b) {
return a * b
}
console.log(kvadriraj.length) // broj argumenata
console.log(kvadriraj.constructor)
Inicijalna vrednost svojstva prototype
je prazan objekat. To je kao kada bismo sami dodali:
kvadriraj.prototype = {}
Prazan prototipski objekat možemo proširiti svojstvima i metodima. On nema uticaja na samu funkciju, ali se koristi ako je pozovemo kao konstruktor.
Proširenje prototipa konstruktorske funkcije
Recimo da imamo konstruktorsku funkciju Junak()
:
function Junak(ime, rasa) {
this.ime = ime
this.rasa = rasa
}
Ne moramo odmah u konstruktor funkciji pobrojati sva svojstva i metode objekta, već ih možemo naknadno dodati preko svojstva prototype
, na sledeći način:
Junak.prototype.energija = 100
Junak.prototype.predstaviSe = function () {
return 'Ja sam ' + this.rasa + ' ' + this.ime
}
Svi metodi i svojstva koje smo dodali u svojstvo prototype
postaju dostupni čim kreiramo novi objekat pomoću konstruktora.
const gimli = new Junak('Gimli', 'patuljak')
gimli.ime // "Gimli"
gimli.rasa // "patuljak"
gimli.predstaviSe() // "Ja sam patuljak Gimli"
gimli.energija // 100
Važno je napomenuti da je svojstvo prototype
„živo“, jer svi objekti dele isti prototype
objekat po referenci. Znači možemo da modifikujemo prototype
u bilo kom trenutku, pa će svi objekti prepoznati promene. Na primer, možemo naknadno dodati novo svojstvo preko prototype
:
Junak.prototype.ziv = true
Iako je objekat gimli
kreiran pre nego što je definisano svojstvo ziv
, ipak će mu imati pristup:
gimli.ziv // true
Ceo primer
function Junak(ime, rasa) {
this.ime = ime
this.rasa = rasa
}
Junak.prototype.energija = 100
Junak.prototype.predstaviSe = function () {
return 'Ja sam ' + this.rasa + ' ' + this.ime
}
const gimli = new Junak('Gimli', 'patuljak')
console.log(gimli.ime)
console.log(gimli.rasa)
gimli.predstaviSe()
console.log(gimli.energija)
Junak.prototype.ziv = true
console.log(gimli.ziv)
Literatura
- Ved Antani, Stojan Stefanov, Objektno-orjentisan JavaScript, Beograd, 2017.