Stronę tą wyświetlono już: 5063 razy
W JavaScript nie da się dziedziczyć w klasyczny sposób, a jedynie poprzez wykorzystanie prototypów. Oto przykład prostej implementacji takiego dziedziczenia:
function Person(_name, _surname){
this.name = _name;
this.surname = _surname;
this.showPersonData = function(){
alert("Imię: " + this.name + "; nazwisko: " + this.surname);
}
}
function Student(_year_of_study, _field_of_study, _name, _surname){
Person.call(this, _name, _surname); // wywołanie konstruktora klasy bazowej
this.year_of_study = _year_of_study;
this.field_of_study = _field_of_study;
this.showStudentData = function(){
alert("Imię: " + this.name + "; nazwisko: " + this.surname + "; rok studiów: " + this.year_of_study + "; kierunek studiów: " + this.field_of_study);
}
}
Student.prototype = Object.create(Person.prototype); // powiązanie klasy bazowej Person z klasą Student
var student = new Student(3, "Operator Łopaty Dwuręcznej", "Marian", "Paździoch");
student.showStudentData();
Na czym polega prototypowe dziedziczenie? Wszystkie metody klasy bazowej są przepisywane do klasy dziedziczącej. Jeszcze tylko jedna zmiana, która dla mnie jest znacząca ze względu na uporządkowanie kodu, ja wolę aby linijka:
Student.prototype = Object.create(Person.prototype); // powiązanie klasy bazowej Person z klasą Student
Została przeniesiona do ciała deklaracji obiektu, co będzie wyglądało następująco:
function Student(_year_of_study, _field_of_study, _name, _surname){
this.prototype = Object.create(Person.prototype); // ta linijka kodu odpowiada linijce: Student.prototype = Object.create(Person.prototype);
Person.call(this, _name, _surname); // wywołanie konstruktora klasy bazowej
this.year_of_study = _year_of_study;
this.field_of_study = _field_of_study;
this.showStudentData = function(){
alert("Imię: " + this.name + "; nazwisko: " + this.surname + "; rok studiów: " + this.year_of_study + "; kierunek studiów: " + this.field_of_study);
}
}