A JavaScript prototípus-alapú öröklődés működése a színfalak mögött

A JavaScript alapvetően különbözik a hagyományos osztályalapú (class-based) nyelvektől, mint a Java vagy a C++. Bár a modern ECMAScript szabványok bevezették a class kulcsszót, a JavaScript a háttérben továbbra is egy prototípus-alapú (prototype-based) nyelv.

Minden JavaScript objektum rendelkezik egy titkos belső tulajdonsággal (ezt a specifikációban [[Prototype]]-nak nevezik), amely egy másik objektumra mutat. Amikor megpróbálunk elérni egy tulajdonságot vagy metódust egy objektumon, a JavaScript motor először magán az objektumon keresi azt. Ha nem találja, fellép a prototípus láncon (prototype chain), és megnézi a szülő objektumot, egészen addig, amíg el nem éri a lánc végét (ami általában az Object.prototype, aminek a prototípusa null).

Gyakorlati példa a prototípus használatára

function Fejleszto(nev, nyelv) {
    this.nev = nev;
    this.nyelv = nyelv;
}

// Metódus hozzáadása a prototípushoz a memóriahatékonyság érdekében
Fejleszto.prototype.bemutatkozik = function() {
    return "Szia, a nevem " + this.nev + " és " + this.nyelv + " nyelven kódolok.";
};

const peter = new Fejleszto("Péter", "JavaScript");
console.log(peter.bemutatkozik());

Ha a bemutatkozik metódust közvetlenül a konstruktoron belül definiáltuk volna a this.bemutatkozik = ... formában, akkor minden egyes új példány létrehozásakor újra és újra létrejönne a függvény a memóriában. A prototípus használatával a metódus csak egyszer jön létre, és minden példány közösen osztozik rajta.