Razredi so predloge za ustvarjanje objektov. Podatke združijo s kodo, ki na teh podatkih deluje. Razredi v
JavaScript-u temeljijo na prototipih, vendar uvajajo lastno sintakso in semantiko. Tako kot funkcije lahko razrede
definiramo na dva načina: z izrazom razreda ali z deklaracijo razreda. Izrazi razreda so lahko anonimni ali
poimenovani (drugače kot spremenljivka, ki jim je dodeljena). Za razliko od deklaracij funkcij imajo deklaracije
razredov enake omejitve “mrtve cone” kot spremenljivke, deklarirane z let ali const, zato
se ne “dvignejo”.
Razred je posebna vrsta funkcije, a namesto ključne besede function uporabimo ključno besedo
class. Lastnosti običajno inicializiramo znotraj metode constructor().
class ImeRazreda {
constructor() { /* ... */ }
}
class Oseba {
constructor(ime, priimek) {
this.ime = ime;
this.priimek = priimek;
}
}
Zgornji primer ustvari razred z imenom ImeRazreda/Oseba, ki ima začetne lastnosti
ime in priimek. Razred (ang. Class) ni objekt — je predloga za JavaScript objekte. Ključne
točke: razred definiraš s class, začetno stanje v constructor(), dedovanje z
extends in klic nad-razreda s super(). Statične metode (static) kličeš na
razredu, ne na instanci.
Razredi (Classes) v JavaScriptu so predloge za ustvarjanje objektov. Definirajo se s ključno besedo
class, začetno stanje pa se nastavi v constructor(). Za razliko od funkcij, deklaracije
razredov niso dvignjene (hoisted), zato jih moramo definirati pred uporabo.
Razredi podpirajo dedovanje z extends in klic nadrejenega konstruktorja z super().
Metode so privzeto na prototipu (instance), statične metode (static) pa na samem razredu. Getters in
setters omogočajo nadzorovan dostop do lastnosti.
Spodnja tabela prikazuje vse ključne koncepte: definicijo, konstruktor, metode, dedovanje, statične člane, get/set in privatne lastnosti. Za vsak element so navedeni opis, sintaksa in konkreten primer kode.
| Ime | Opis | Sintaksa | Primer |
|---|---|---|---|
| Deklaracija razreda | Ustvari razred s ključno besedo class (ni dvignjena/hoisted). | class Ime { ... } |
class Oseba { constructor(ime) { this.ime = ime; } } |
| Razredni izraz | Razred shranjen v spremenljivko (lahko je anonimen). | const Ime = class { ... }; |
const Oseba = class { constructor(ime) { this.ime = ime; } }; |
| constructor() | Inicializira novo instanco (se kliče ob new). |
constructor(parametri) { ... } |
constructor(ime, priimek) { this.ime = ime; this.priimek = priimek; } |
| new | Ustvari novo instanco razreda. | const instanca = new Razred(args); |
const ana = new Oseba("Ana", "Novak"); |
| Metoda instance | Metoda, ki jo lahko kliče vsaka instanca. | imeMetode() { ... } |
polnoIme() { return this.ime + " " + this.priimek; } |
| static | Statična metoda na razredu (ne na instanci). | static imeMetode() { ... } |
static izNiza(niz) { return new Oseba(niz); } |
| get | Getter – dostop do lastnosti kot do vrednosti. | get ime() { return ...; } |
get starost() { return this._starost; } |
| set | Setter – nastavljanje lastnosti z validacijo. | set ime(vrednost) { ... } |
set starost(v) { if (v > 0) this._starost = v; } |
| extends | Ustvari podrazred, ki podeduje lastnosti in metode nadrazreda. | class Podrazred extends Nadrazred { ... } |
class Student extends Oseba { constructor(ime, letnik) { super(ime); this.letnik = letnik; } } |
| super() | Kliče konstruktor nadrazreda (obvezno v podrazredu pred uporabo this). |
super(argumenti); |
super(ime, priimek); |
| super.metoda() | Kliče metodo nadrazreda iz podrazreda. | super.metoda(argumenti); |
super.polnoIme(); |
| instanceof | Preveri, ali je objekt instanca določenega razreda. | obj instanceof Razred |
ana instanceof Oseba; // true |
| # (Privatna lastnost) | Lastnost, ki ni dostopna izven razreda (ES2022+). | #lastnost; |
#starost; constructor(s) { this.#starost = s; } |
| # (Privatna metoda) | Metoda, ki ni dostopna izven razreda (ES2022+). | #metoda() { ... } |
#izracunaj() { return this.#starost * 2; } |
| static lastnost | Lastnost na samem razredu (ne na instanci). | static lastnost = vrednost; |
static vrsta = "človek"; |
| Override metode | Podrazred prepiše metodo nadrazreda z isto imenom. | imeMetode() { ... } |
polnoIme() { return "Študent: " + super.polnoIme(); } |
| constructor (lastnost) | Vrne funkcijo, ki je ustvarila instanco. | obj.constructor |
ana.constructor; // class Oseba { ... } |
| prototype | Objekt, ki vsebuje vse metode instance. | Razred.prototype |
Oseba.prototype.polnoIme; |
| name | Vrne ime razreda kot niz. | Razred.name |
Oseba.name; // "Oseba" |