Deklaracja i tworzenie obiektów klas w JavaScript

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3757 razy

JavaScript, jeżeli chodzi o deklarowanie klas ma dość nietuzinkowe podejście, a to dlatego, że deklarację klasy w JavaScript tworzy się za pomocą słowa kluczowego function. Przykład implementacji:

function Person(_name, _surname, birth_year, birth_month, birth_day){ this.name = _name; // pole publiczne klasy this.surname = _surname; var birthday; // pole prywatne klasy przechowujące datę urodzin delikwenta var checkBirthDay = function(birth_year, birth_month, birth_day){ // prywatna metoda sprawdzająca, czy data urodzin jest poprawna var now = new Date(); if(now.getFullYear() < birth_year){ alert("Niepoprawna data urodzin (rok się nie zgadza)"); return false; }else if(now.getFullYear() == birth_year && now.getMonth() + 1 < birth_month){ alert("Niepoprawna data urodzin (miesiąc się nie zgadza)"); return false; }else if(now.getFullYear() == birth_year && now.getMonth() + 1 == birth_month && now.getDate() < birth_day){ alert("Niepoprawna data urodzin (dzień się nie zgadza)"); return false; }else{ return true; } } this.setBirthDay = function(birth_year, birth_month, birth_day){ // publiczna metoda ustawiająca datę urodzin if(checkBirthDay(birth_year, birth_month, birth_day)){ // tutaj wywołanie prywatnej metody klasy birthday = new Date(birth_year, birth_month - 1, birth_day); }else{ birthday = new Date(); } } this.setBirthDay(birth_year, birth_month, birth_day); // wywołanie publicznej metody klasy w jej wnętrzu this.getAge = function(){ // publiczna metoda zwracająca wiek delikwenta return new Date().getFullYear() - birthday.getFullYear(); } this.showPersonData = function(){ // publiczna metoda alert("Imię: " + this.name + "; nazwisko: " + this.surname + " data urodzin: " + ("0" + birthday.getDate()).substr(-2) + "-" + ("0" + (birthday.getMonth() + 1)).substr(-2) + "-" + birthday.getFullYear() + "; wiek: " + this.getAge()); }; } var person = new Person("Marian", "Paździoch", 1990, 1, 1); // utworzenie nowego obiektu klasy za pomocą słowa kluczowego new person.showPersonData(); // wywołanie publicznej metody klasy

Coby nie pisać zbyt wiele, w powyższym kodzie fragment:

this.name = _name; // pole publiczne klasy this.surname = _surname;

tworzy publiczne pola klasy, które dostępne będą zarówno wewnątrz jak i na zewnątrz klasy. Z kolei prywatne pole klasy tworzy ta linijka:

var birthday; // pole prywatne klasy przechowujące datę urodzin delikwenta

Metody publiczne zostały utworzone w linii 23, 33 oraz 37, natomiast prywatna metoda w linii 7.

Wywołanie konstruktora klasy ma miejsce w tym fragmencie kodu:

var person = new Person("Marian", "Paździoch", 1990, 1, 1); // utworzenie nowego obiektu klasy za pomocą słowa kluczowego new

Możliwe jest również rozszerzenie deklaracji klasy o kolejne metody w następujący sposób:

Person.prototype.showNameAndSurname = function(){ alert("Imię: " + this.name + "; nazwisko: " + this.surname); } person.showNameAndSurname(); // wywołanie metody publicznej klasy Person

W ten sam sposób można dodać do deklaracji klasy publiczne pole.

Propozycje książek