Javascript – rozszerzanie obiektów (object extending)

Bywa często tak, że chcemy aby obiekty miały jakąś część wspólną. Aby uzyskać taki efekt w JS można się posłużyć poniżej przedstawionym przykładem.

function Czlowiek() {
    var _this = this;
    this.grupa = 'człowiek';
    this.nazwa = 'nieokreślono';
    
    this.test = function() { return "test 1"; };
    
    this.toString = function() {
        console.log((_this.constructor.name) + ', ' 
                + _this.nazwa + ' → ' + _this.grupa 
                + ', (' + _this.test() + ')');
    };
}

function Kobieta() {
    Czlowiek.apply(this, arguments);
    this.nazwa = 'kobieta';
    this.test = function() { return "test 2"; };
}

function Mezczyzna() {
    Czlowiek.apply(this, arguments);
    this.nazwa = 'mężczyzna';
}


function Ania() {
    Kobieta.apply(this, arguments);
    this.test = function() { return "Cześć. Mam na imię Ania."; };
}

new Czlowiek().toString();
new Kobieta().toString();
new Mezczyzna().toString();
new Ania().toString();

W rezultacie otrzymamy na konsoli następujący wynik:

Czlowiek, nieokreślono → człowiek, (test 1)
Kobieta, kobieta → człowiek, (test 2)
Mezczyzna, mężczyzna → człowiek, (test 1)
Ania, kobieta → człowiek, (Cześć. Mam na imię Ania.)