JavaScript klašu mantošana

JavaScript ir gaužām nepateicīga valoda, ja ir vēlme rakstīt objektorientētu kodu. Vienkāršas klases veidot ir vēl salīdzinoši vienkārši (izmantojot funkciju prototipus). Taču jau tik elementāra konstrukcija kā klašu mantošana rada zināmas problēmas. Zemāk ir piemērs vienam no risinājumiem kā, neizmantojot ārējas bibliotēkas, iespējams izveidot klašu mantošanu JavaScript valodā.

// Vienkārša klase ar divām metodēm, no kurām viena tiks pārlādēta.
function BaseClass() { }
BaseClass.prototype.showMessage = function() { alert("BaseClass"); }
BaseClass.prototype.execute = function() { this.showMessage(); }

// Atvasinātā klase
function DerivedClass() { }
// Nosakam, no kuras klases atvasinām
DerivedClass.prototype = new BaseClass();
// saglabājam atsauci, no kuras varēs izsaukt bāzes klases metodes
DerivedClass.prototype.base = BaseClass.prototype;
// Pārlādējam metodi
DerivedClass.prototype.showMessage = function() {
    alert("DerivedClass");
    // izsaucam bāzes klases metodi
    this.base.showMessage.call(this);
}

// Izveidojam atvasinātās klases objektu
var obj = new DerivedClass();
// Izsaucam metodi, ko tā manto no BaseClass
obj.execute();
// execute() parāda divus ziņojumus:
// vispirms "DerivedClass", pēc tam "BaseClass".