Dziedziczenie prototypowe w JavaScript

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4818 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); } }
Propozycje książek