Przewodnik po języku JavaScript 1.5:Powrót dziedziczenia własności:Brak wielokrotnego dziedziczenia
z Mozilla Developer Center, polskiego centrum programistów Mozilli.
UWAGA: Tłumaczenie tej strony nie zostało zakończone.
Może być ona niekompletna lub wymagać korekty.
Chcesz pomóc? | Dokończ tłumaczenie | Sprawdź ortografię | Więcej takich stron...
[edytuj] Brak wielokrotnego dziedziczenia
Niektóre języki obiektowe pozwalają na wielokrotne dziedziczenie. Oznacza to, że obiekt może dziedziczyć własności i wartości z niespokrewnionego obiektu-rodzica. JavaScript nie obsługuje wielokrotnego dziedziczenia.
Dziedziczenie wartości własności pojawia się w momencie uruchomienia, gdy JavaScript przeszukuje łańcuch prototypu obiektu, aby odnaleźć właściwą wartość. Ponieważ obiekt posiada pojedynczy powiązany prototyp, JavaScript nie może dynamicznie dziedziczyć z więcej niż jednego łańcucha prototypu.
W JavaScripcie możesz użyć konstruktora funkcji do wywołania więcej niż jednej, innej funkcji w jego wnętrzu. Daje to pozorne wrażenie wielokrotnego dziedziczenia. Rozważ przykładowo poniższe instrukcje:
function Hobbyist (hobby) {
this.hobby = hobby || "scuba";
}
function Engineer (name, projs, mach, hobby) {
this.base1 = WorkerBee;
this.base1(name, "engineering", projs);
this.base2 = Hobbyist;
this.base2(hobby);
this.machine = mach || "";
}
Engineer.prototype = new WorkerBee;
dennis = new Engineer("Doe, Dennis", ["collabra"], "hugo")
Further assume that the definition of WorkerBee is as used earlier in this chapter. In this case, the dennis object has these properties:
dennis.name == "Doe, Dennis" dennis.dept == "engineering" dennis.projects == ["collabra"] dennis.machine == "hugo" dennis.hobby == "scuba"
So dennis does get the hobby property from the Hobbyist constructor. However, assume you then add a property to the Hobbyist constructor's prototype:
Hobbyist.prototype.equipment = ["mask", "fins", "regulator", "bcd"]
Obiekt dennis nie dziedziczy tej nowej własności.