ES6 Osztályok vs. Prototípusok: Csak szintaktikai cukorka (Syntactic Sugar)?

A 2015-ben megjelent ES6 (ECMAScript 6) szabvány egyik legnagyobb újítása a class kulcsszó bevezetése volt. Sokan azt hitték, hogy a JavaScript ezzel teljesen megváltozott, de a valóságban ez csupán "szintaktikai cukorka" (syntactic sugar) a már meglévő prototípus-alapú működés felett.

Az osztályok bevezetése sokkal tisztább, olvashatóbb és a más nyelvekből érkező fejlesztők számára ismerősebb struktúrát biztosít. Nézzük meg, hogyan néz ki az előző cikkben bemutatott prototípusos példa modern ES6 osztályként:

class Fejleszto {
    constructor(nev, nyelv) {
        this.nev = nev;
        this.nyelv = nyelv;
    }
    
    bemutatkozik() {
        return `Szia, a nevem ${this.nev} és ${this.nyelv} nyelven kódolok.`;
    }
}

Privát metódusok és mezők az osztályokban

A modern JavaScript (ES2022+) már támogatja a valódi privát osztálytagokat is. Ehhez a változó vagy metódus neve elé egy # (hash) karaktert kell tenni. Ezeket a tagokat az osztályon kívülről semmilyen módon nem lehet elérni vagy módosítani:

class Bankfiok {
    #egyenleg = 0; // Privát mező
    
    constructor(tulajdonos, kezdoOsszeg) {
        this.tulajdonos = tulajdonos;
        this.#egyenleg = kezdoOsszeg;
    }
    
    getEgyenleg() {
        return this.#egyenleg; // Osztályon belül elérhető
    }
}