Deklaracja i tworzenie obiektów klas w JavaScript

Stronę tą wyświetlono już: 149 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:

Listing 1
  1. function Person(_name, _surname, birth_year, birth_month, birth_day){
  2. this.name = _name; // pole publiczne klasy
  3. this.surname = _surname;
  4. var birthday; // pole prywatne klasy przechowujące datę urodzin delikwenta
  5. var checkBirthDay = function(birth_year, birth_month, birth_day){ // prywatna metoda sprawdzająca, czy data urodzin jest poprawna
  6. var now = new Date();
  7. if(now.getFullYear() < birth_year){
  8. alert("Niepoprawna data urodzin (rok się nie zgadza)");
  9. return false;
  10. }else if(now.getFullYear() == birth_year && now.getMonth() + 1 < birth_month){
  11. alert("Niepoprawna data urodzin (miesiąc się nie zgadza)");
  12. return false;
  13. }else if(now.getFullYear() == birth_year && now.getMonth() + 1 == birth_month && now.getDate() < birth_day){
  14. alert("Niepoprawna data urodzin (dzień się nie zgadza)");
  15. return false;
  16. }else{
  17. return true;
  18. }
  19. }
  20. this.setBirthDay = function(birth_year, birth_month, birth_day){ // publiczna metoda ustawiająca datę urodzin
  21. if(checkBirthDay(birth_year, birth_month, birth_day)){ // tutaj wywołanie prywatnej metody klasy
  22. birthday = new Date(birth_year, birth_month, birth_day);
  23. }else{
  24. birthday = new Date();
  25. }
  26. }
  27. this.setBirthDay(birth_year, birth_month, birth_day); // wywołanie publicznej metody klasy w jej wnętrzu
  28. this.getAge = function(){ // publiczna metoda zwracająca wiek delikwenta
  29. return new Date().getFullYear() - birthday.getFullYear();
  30. }
  31. this.showPersonData = function(){ // publiczna metoda
  32. 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());
  33. };
  34. }
  35. var person = new Person("Marian", "Paździoch", 1990, 1, 1); // utworzenie nowego obiektu klasy za pomocą słowa kluczowego new
  36. person.showPersonData(); // wywołanie publicznej metody klasy

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

Listing 2
  1. this.name = _name; // pole publiczne klasy
  2. 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:

Listing 3
  1. 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:

Listing 4
  1. 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:

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

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

Komentarze