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 obiekt instancja z polem jakies.pole i wartością 1, a następnie umieści w nim pola klasy klasa.

Istnieją inne sposoby na uzyskanie dziedziczenia w JavaScript.

wyjaśnić inne sposoby dziedziczenia


Zmodyfikowano: 14.09.2011, 00:57
submit