Il linguaggio Javascript supporta il concetto di ereditarietà attraverso l'uso dei prototipi (objects prototypes). Un prototipo rappresenta una sorta di template in cui vengono definiti un insieme di proprietà e metodi che si desidera vengano condivise da tutte le istanze di un determinato tipo di oggetto. Ogni tipo di oggetto, in Javascript, ha una proprietà prototype che è possibile estendere o ereditare.
Nell'esempio seguente viene utilizzato un object prototype FiguraGeometrica che definisce due metodi ( GetArea() e Disegna() ) facenti capo, rispettivamente, ai metodi FiguraGeometrica_GetArea() e FiguraGeometrica_Disegna(). Gli object prototype Cerchio e Rettangolo (aventi il rispettivo prototype definito come una istanza di FiguraGeometrica) erediteranno tali metodi effettuando, però, l'override del metodo Disegna(),ridefinito in maniera opportuna per ciascun oggetto:
FiguraGeometrica.prototype.GetArea = FiguraGeometrica_GetArea;
FiguraGeometrica.prototype.Disegna = FiguraGeometrica_Disegna;
function FiguraGeometrica ()
{
}
function FiguraGeometrica_GetArea()
{
return this.area;
}
function FiguraGeometrica_Disegna()
{
alert( "Metodo Disegna della classe FiguraGeometrica" );
}
Cerchio.prototype = new FiguraGeometrica();
Cerchio.prototype.constructor = Cerchio;
Cerchio.prototype.baseClass = FiguraGeometrica.prototype.constructor;
Cerchio.prototype.Disegna = Cerchio_Disegna;
function Cerchio(r)
{
this.area = Math.PI * r * r;
}
function Cerchio_Disegna()
{
alert("Metodo Disegna della classe Cerchio");
}
Rettangolo.prototype = new FiguraGeometrica();
Rettangolo.prototype.constructor = Rettangolo;
Rettangolo.prototype.baseClass = FiguraGeometrica.prototype.constructor;
Rettangolo.prototype.Disegna = Rettangolo_Disegna;
function Rettangolo(x, y)
{
this.area = x * y;
}
function Rettangolo_Disegna()
{
alert("Metodo Disegna della classe Rettangolo");
}
// Vengono quindi costruiti due oggetti, rispettivamente
// di classe Cerchio e Rettangolo ed invocati i metodi "overridati"
// Disegna oltre al metodo GetArea, definito nella classe padre
var circle = new Cerchio( 5 );
var rectangle = new Rettangolo(10, 20);
alert( "Classe padre della classe Cerchio = " + circle.baseClass);
alert( "Area del Cerchio = " + circle.GetArea() );
circle.Disegna();
alert( "Classe padre della classe Rettangolo = " + rectangle.baseClass);
alert( "Area del Rettangolo = " + rectangle.GetArea() );
rectangle.Disegna();