Obiekty
O obiektach wspominaliśmy już podczas wcześniejszych warsztatów. Warto jednak rozwinąć ten temat. Zacznijmy od tego, że obiekt można stworzyć na kilka sposobów. Poznaliśmy już jeden z nich - notację literałową. W tym przypadku zawartość obiektu umieszczamy pomiędzy klamrowymi nawiasami, poszczególne elementy oddzielamy przecinkami, a nazwę i wartość oddzielamy dwukropkiem:
const book1 = {
title: "Hrabia Monte Christo",
author: "Aleksander Dumas",
quantity: 4,
price: 57,
message: function() {
alert("Zostało " + this.quantity + " książek")
}
}
By dodać nową właściwość:
book1.publisher = "Nowe Media";
By usunąć włściwość:
delete book1.publisher;
By odwołać się do właśiwości i metod naszego obiektu należy podać nazwę obiektu, dodać kropkę i nazwę metody/właściwości do której się odnosimy:
book1.author;
book1.message()
Konstrukcja wygląda znajomo, prawda? W podobny sposób wywołujemy metody innych typów danych, np:
const shopping = ['oranges', 'milk', 'olive', 'cheese'];
shopping.length;
shopping.push('bread');
Powyższa metoda tworzenia obiektów pozwala nam unikać ewentualnych błędów i umożliwia tworzenie obiektu na żądanie.
Konstruktory wbudowane
Do stworzenia nowego obiektu możemy wykorzystać funkcje konstrukcyjne, np.:
book2 = new Object();
book2.title = "Frankenstein";
book2.author = "Mary Shelley";
book2.buyMessage = function () {
alert("Kupiłeś książkę 'Frankenstein'");
};
Notaca literałowa wydaje się bardziej czytelna i zwięzła. Jest też bardzie wydajna, ponieważ orzy tworzeniu obiektu za pomocą funkcji konstruującej, interpreter przeszukuje zakresy zmiennych by odnaleźć właściwy konstruktor.
Własne funkcje konstruujące
Możemy tworzyć własne funkcje konstruujące, bo tak naprawdę są to zwykłe funkcje, przykład:
function Book(title, author, quantity, price) {
this.author = author;
this.quantity = quantity;
this.price = price;
this.message: function() {
return("Zostało " + this.quantity + " książek")
}
}
const book3 = new Book("Great Expectations", "Charles Dickens", 3, 65);
alert(book3.message());
Dobrą praktyką jest zaczynanie nazw funkcji konstrukcyjnych od wielkiej listery. W naszym przypadku tą funkcją jest Book. Następnie definiujemy właściwości i metody naszego obiektu. Przy tworzeniu nowego obiektu podajemy odowiednie wartości jako parametry funkcji.
Zadanie 1.
Wykorzystując notację literałową stwórz obiekt rooms, który będzie zawierał minimum 3 nazwy sal (np. a, b, c) jako klucze i liczbę miejsc jako wartości.
Zadanie 2.
Stwórz konstruktor Movie, który będzie miał następujące parametry: tytuł, reżyser, czas trwania, numer sali, cena biletu, opis, plakat.
Zdefiniuj następujące właściwości: tytuł filmu, reżyser filmu, czas trwania filmu w minutach, liczbę dostępnych miejsc, cenę biletu, opis filmu, scieżkę do grafiki z plakatem.
Liczba dostępnych miejsc powinna zawierać wartość z obiektu SALA dla odpowiedniego pokoju.
Zdefiniuj metodę, która będzie zwracać informację o liczbie dostępnych miejsc.
Zadanie 3.
Stwórz funkcję do sprzedaży biletów. Funkcja powinna przyjmować dwa parametry - film oraz liczbę biletów.
Jeżeli liczba biletów którą chcemy kupić jest większa niż liczba dostępnych miejsc powinniśmy dostać taką informację. Jeżeli dostępna jest odpowiednia liczba miejsc powinniśmy dostać informację o kwocie do zapłaty, a liczba dostępnych miejsc na dany film powinna się zmniejszyć o liczbę kupionych biletów.
Zadanie 4.
Stwórz trzy filmy, każdy powinien być wyświetlany w innej sali. Sprawdź czy twój kod działa próbując kupić różną liczbę biletów na różne filmy.