vadnica-logo
Editor Moj Blog Moje storitve O projektu Telegram O meni O meni

JavaScript Razredi

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”.

PRIMER
REZULTAT

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.

Ustvarjanje in uporaba razredov

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.

Dedovanje, metode in statični člani

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.

Popoln pregled razredov (Cheat Sheet)

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"