Dziedziczenie klas w JavaScript
Tutaj przedstawiona jest tylko implementacja dziedziczenia w JavaScript, a nie opis jak korzystac z dziedziczenia w ogóle. Jesli nie masz praktyki w wykorzystywaniu dziedziczenia klas w innych jezykach, to mozesz pominac te strone.
formatowanie, poprawki
W JavaScript dziedziczenie realizowane jest przez prototypy. Jesli chcemy utworzyc klase Pochodna dziedziczaca po klasie Bazowa, ustawiamy pole
Pochodna.prototype na nowa instancje klasy Bazowa:
function Bazowa() {
this.metodaA = function() {
alert("Bazowa::A()");
}
this.metodaB = function() {
alert("Bazowa::B()");
}
}
function Pochodna() {
// metodaB przeciaza odpowiednia metode z klasy Bazowa:
this.metodaB = function () {
alert("Pochodna::B()");
}
}
Pochodna.prototype = new Bazowa();
x = new Bazowa();
y = new Pochodna();
x.metodaA(); // wyswietla: „Bazowa::A()”
y.metodaA(); // wyswietla: „Bazowa::A()”
x.metodaB(); // wyswietla: „Bazowa::B()”
y.metodaB(); // wyswietla: „Pochodna::B()”
Istnieja inne sposoby na uzyskanie dziedziczenia w JavaScripcie. Osoby przyzwyczajone do Javy lub C++ moga zmodyfikowac prototyp obiektu Object w nastepujacy sposób:
Object.prototype.parent = function (supClass) {
tempObj = new supClass();
for (property in tempObj) {
this[property] = tempObj[property];
}
};
by pózniej w funkcjach konstruktora korzystac z metody parent(), rozwiazujacej szybko problem dziedziczenia. Oto przyklad:
function Bazowa() {
this.value = 5;
this.metoda1 = function () {
alert("Bazowa::metoda1() " + this.value);
}
this.metoda2 = function () {
alert("Bazowa::metoda2()");
}
}
function Pochodna() {
this.parent(Bazowa);
this.metoda1 = function () {
alert("Pochodna::metoda1() " + this.value);
}
}
Wazne tylko, zeby this.parent() wywolywac jako pierwsza instrukcje w konstruktorze.
Zmodyfikowano: 17.03.2007, 17:44