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