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