RicH and FamouS

       Home         Glosar IT                                                                                                                                                                                                              SUBSCRIBE NOW!
        

09.04.2009

Mostenire claselor in JavaScript

O metoda de a folosi derivarea claselor in JavaScript. Desi este un pic cam ciudata in raport cu celelalte limbaje care suporta clase este totusi o metoda de a obtine clase care sa poata fii mostenite in JavaScript

Cod:
/****** Person constructor *****/
// Constructorul unei clase. Pentru a putea deriva aceasta clasa constructorul nu trebuie sa seteze nini o
// proprietate a clasei. Pentru a seta proprietatile constructorul va apela o alta functie care va face initializarile
function Person(first, last)
{
if ( arguments.length > 0 )
this.init(first, last);
}

/****** Person init *****/
// Functia care seteaza proprietatile clasei si care va fi apelata de catre clasele derivate
Person.prototype.init = function(first, last)
{
this.first = first;
this.last = last;
};

/****** Person toString *****/
// O alta functie a clasei care va fi suprascrisa de clasele derivate dar va putea fi apelata din aceste
Person.prototype.toString = function()
{
return this.first + "," + this.last;
};

/****** Setup Employee inheritance *****/
// Deriveaza Employee din clasa Person
//Defineste prototipul clasei Employee specificand ca este o sub clasa a clasei Person
Employee.prototype = new Person();
// Defineste constructorul clasei Employee
Employee.prototype.constructor = Employee;
// Defineste clasa Person ca super-clasa (clasa parinte) a clasei
Employee si permite astfel accesul la metodele // din clasa parinte
Employee.superclass = Person.prototype;

/****** Employee constructor *****/
// Constructorul clasei. Cheama functia init pentru a initializa proprietatile
function Employee(first, last, id)
{
if ( arguments.length > 0 )
this.init(first, last, id);
}

/****** Employee init *****/
Employee.prototype.init = function(first, last, id)
{
// Apeleaza metoda init din clasa parinte accesand-o prin
prototipul acesteia si specificand ce parametri va primi. // metoda
call() este folosita pentru a apela o functie si primeste ca parametri
obiectul asupra careia este // apelata si parametri cu care
functia va fii apelata
Employee.superclass.init.call(this, first, last);
// init properties
//Dupa ce functiile din clasele superioare seteaza parametri se seteaza parametri proprii ai clasei
this.id = id;
}

/****** Employee toString *****/
Employee.prototype.toString = function()
{
// Este apelata functia toString din clasa parinte
var name = Employee.superclass.toString.call(this);
// Apoi se executa codul specific clasei
// Se pare ca la apelarea parintelui informatiile setate de functia
din care se face apelul sunt sterse. Acest lucru // poate fi evitat
prin salvarea valorilor in niste variabile care nu sunt implicate in
apelarea funcitei din clasa // parinte iar apoi realizand o
combinatie intre valorile salvate si cele returnate de functia parinte
return this.id + ":" + name;
};

/***** * Setup Manager inheritance Same as in the case of Employee only that it specifies Employee as parent class
*****/
Manager.prototype = new Employee;
Manager.prototype.constructor = Manager;
Manager.superclass = Employee.prototype;

/****** Manager constructor *****/
function Manager(first, last, id, department)
{
if ( arguments.length > 0 )
this.init(first, last, id, department);
}

/****** Manager init *****/
Manager.prototype.init = function(first, last, id, department)
{
// Call superclass method
Manager.superclass.init.call(this, first, last, id);
// init properties
this.department = department;
}

/****** Manager toString *****/
Manager.prototype.toString = function()
{
var employee = Manager.superclass.toString.call(this);
return employee + " manages " + this.department;
}

    Blog din Moldova    FastCounter 

 
Copyright © 2008-2010 Foster1. All rights reserved.