Dziedziczenie klas w JavaScript
W JavaScript dziedziczenie realizowane jest przez skopiowanie wszystkich pól klasy bazowej do klasy pochodnej. Poniżej znajduje się metoda, która ułatwi to:
Object.prototype.extend = function () {for (i in arguments) {tempObj = new arguments[i];for (property in tempObj) {this[property] = tempObj[property];}}};
Od tej pory jeśli chcemy utworzyć klasę Pochodna dziedziczącą od klasy Bazowa, w konstruktorze klasy Pochodna wywołujemy metodę extend()
przekazując do niej klasę Bazowa:
function Bazowa() {this.value = 5;this.metoda1 = function () {alert("Bazowa.metoda1()" + this.value);}this.metoda2 = function () {alert("Bazowa.metoda2()");}}function Pochodna() {/* kopiuje pola klasy Bazowa do klasy Pochodna */this.extend(Bazowa);/* metoda1 przeciąża odpowiednią metodę z klasy Bazowa */this.metoda1 = function () {alert("Pochodna.metoda1() " + this.value);}}new Pochodna().metoda1(); // wyświetli Pochodna.metoda1()5
Ważne tylko, żeby this.extend() wywoływać jako pierwszą instrukcję w konstruktorze. Inaczej zmienne z klasy bazowej będą dostępne od wywołania extend(). Można też funkcji
extend() podać kilka klas, tworząc tak zwane wielodziedziczenie:
this.extend(Bazowa1, Bazowa2, Bazowa3);
Innym przykładem jest utworzenie instancji klasy tą funkcją:
var instancja = {jakies: {pole: 1}}instancja.extend(klasa)Utworzy obiektinstancjaz polemjakies.polei wartością1, a następnie umieści w nim pola klasyklasa.
Istnieją inne sposoby na uzyskanie dziedziczenia w JavaScript.
wyjaśnić inne sposoby dziedziczenia
Zmodyfikowano: 14.09.2011, 07:57