Prototípus alapú öröklődés

Az öröklődést más nyelvek általában a következő szintaxissal támogatják.

class Parent{

}

class Child extends Parent{

}
Az öröklődés UML osztálydiagramja

JavaScriptben nincsen operátor az öröklődésre, ennek ellenére JavaScriptben lehetséges az öröklődés (JavaScriptben nem örökíthetünk beépített objektumból. Lásd orokites/3.html. A prototípus alapú öröklődés lényege, hogy a konstruktor függvény prototípusának egy teljes objektumot adunk értékül, így annak összes tulajdonsága meg fog jelenni a gyerek objektumban.

subClass.prototype = new superClass;

Íme egy egyszerű példa:

function ClassA(){
    this.x = 0;
    alert('Constructor A');

    this.Bemutatkozas = function(){
        alert("En ClassA példány vagyok");
    };
}

function ClassB(){
    this.getX = function (){
        return this.x;
    };
    this.setX = function (newValue){
        this.x = newValue;
    };

    this.Bemutatkozas = function(){
        alert("En ClassB példány vagyok");
    };
}
ClassB.prototype = new ClassA();

Privát láthatóságú tagváltozókra ügyelni kell prototípus alapú öröklődési modell használatakor, mivel meglepetéseket okozhat.

function ClassA(){
    var _private = 0;
    this.getPrivate = function(){
        return _private;
    };
    this.setPrivate = function(_value){
         _private = _value;
    };
}

function ClassB(){};
ClassB.prototype = new ClassA;

var oB = new ClassB();
var oB2= new ClassB();
oB2.setPrivate(111);
alert(oB2.getPrivate() +":"+  oB.getPrivate());

Privát láthatóságú tagváltozó a szülő konstruktorban statikus változóként viselkedik. Az oB.getPrivate() metódus 0 helyett 111-et ad vissza, pedig nem ezt vártuk. Ez azért van, mert mindkét gyerek objektum (oB és oB2) ugyanazt a ClassA függvény objektumot használja. Ha egy függvény objektumot örökíteni szeretnénk, ajánlott elkerülni lokális változók használatát a függvény konstruktorban.

A prototípus alapú öröklődés jellemzői:

Spirituális családállítás