JavaScript - obiekty


Obiekty

Obiekt to zgrupowany zbiór zmiennych i funkcji, przeznaczony do utworzenia modelu lub czegokolwiek innego, co jest znane w świecie rzeczywistym.
W obiekcie zmienne i funkcje przybierają nowe nazwy

Zmienne w obiekcie stają się właściwościami.
Właściwości dostarczają informacji o obiekcie np. nazwa hotelu, liczba dostępnych w nim pokoi.

Funkcje w obiekcie stają się metodami.
Metody przedstawiają zadania powiązane z danym obiektem.
Na przykład liczbę wolnych pokoi można sprawdzić przez odjęcie liczby zarezerwowanych pokoi od liczby wszystkich pokoi.
wolne pokoje = wszystkie pokoje - zarezerwowane pokoje



Utworzenie obiektu i jego wywołanie

<script type="text/javascript">
const person = {
    firstName: 'Adam',
    lastName: 'Adamowicz',
    age: 5
};
document.write(person + '<br />');
document.write(person.firstName + '<br />');
document.write(person.lastName + '<br />');
document.write(person.age + '<br />');
</script>

wynik skryptu


Obiekt w obiekcie

<script type="text/javascript">
const personX = {
    firstName: 'Krystian',
    lastName: 'Krystianowski',
    age: 105,
    address: {
        city: 'Katowice',
        street: 'Katowicka',
        streetNumber: '77/88'
    }
};
document.write(personX.firstName + '<br />');
document.write(personX.lastName + '<br />');
document.write(personX.age + '<br />');
document.write(personX.address.city + '<br />');
document.write(personX.address.street + '<br />');
document.write(personX.address.streetNumber + '<br />');
</script>

wynik skryptu


Wywołanie obiektu za pomocą funkcji

<script type="text/javascript">
const person1 = {
    firstName: 'Anastazja',
    lastName: 'Anastowska',
    age: 15
};
const person2 = {
    firstName: 'Basia',
    lastName: 'Basińska',
    age: 25
};

const showPersonalDetails = person => {
    document.write(`imię: ${person.firstName} <br />`);
    document.write(`nazwisko: ${person.lastName} <br />`);
    document.write(`wiek: ${person.age} <br />`);
};
showPersonalDetails(person2);
</script>

wynik skryptu


Przekierowanie z jednego obiektu na drugi obiekt

<script type="text/javascript">
const person3 = {
    firstName: 'Czesław',
    lastName: 'Czesławski',
    age: 35
};
const person4 = {
    firstName: 'Dariusz',
    lastName: 'Dariuszowski',
    age: 45,
    person3: person3
};

document.write('imię: ' + person4.person3.firstName + '<br />');
document.write('nazwisko: ' + person4.person3.lastName + '<br />');
document.write('wiek: ' + person4.person3.age + '<br />');
</script>

wynik skryptu


Nadpisywanie pola w obiekcie

<script type="text/javascript">
const person5 = {
    firstName: 'Emilia',
    lastName: 'Emilewska',
    age: 55
};

document.write('imię: ' + person5.firstName + '<br />');
document.write('nazwisko: ' + person5.lastName + '<br />');
document.write('wiek: ' + person5.age + '<br /><br />');

person5.firstName = 'Flora';
person5.lastName = 'Floriańska';
person5.age = 65;

document.write('imię: ' + person5.firstName + '<br />');
document.write('nazwisko: ' + person5.lastName + '<br />');
document.write('wiek: ' + person5.age + '<br /><br />');
</script>

wynik skryptu



obiekt - notacja literału

Obiekt to nawias klamrowy i jego zawartość.
W poniższym przykładzie obiekt jest przechowywany w zmiennej o nazwie hotel, a więc odwołujemy się do niego jako do obiektu hotel.

W metodzie chcekAvailability() mamy słowo kluczowe this, które wskazuje, że rooms i booked to właściwości danego obiektu.

notacja z użyciem kropki - dostęp do właściwości obiektu oraz dostęp do metody obiektu
dostęp do właściwości obiektu (nazwa obiektu, kropka, nazwa właściwości)
dostęp do metody obiektu (nazwa obiektu, kropka, nazwa metody)

<script type="text/javascript">
var hotel = {
    name: 'Mariot',
    rooms: 100,
    booked: 75,
    gym: true,
    roomTypes: ['twin', 'double', 'suite'],
    checkAvailability: function() {
        return this.rooms - this.booked;
    }
};

var hotelName = hotel.name;
var hotelRooms = hotel.rooms;
var hotelBooked = hotel.booked;
var hotelGym = hotel.gym;

var hotelRoomTypes00 = hotel.roomTypes[0];
var hotelRoomTypes01 = hotel.roomTypes[1];
var hotelRoomTypes02 = hotel.roomTypes[2];

var freeRooms = hotel.checkAvailability();

document.write("name: " + hotelName + "<br />");
document.write("rooms: " + hotelRooms + "<br />");
document.write("booked: " + hotelBooked + "<br />");
document.write("gym: " + hotelGym + "<br />");
document.write("room types: " + hotelRoomTypes00 + ", " + hotelRoomTypes01 + ", " + hotelRoomTypes02);
document.write("<br />free rooms: " + freeRooms);
</script>


wynik skryptu



obiekt - notacja literału II

<script type="text/javascript">
var hotel = {
    name: 'Hotel Hrabiego',
    rooms: 200,
    booked: 150,
    gym: true,
    roomTypes: ['twin', 'double', 'suite'],
    checkAvailability: function() {
        return this.rooms - this.booked;
    }
};

document.write("name: " + hotel.name + "<br />rooms: " + hotel.rooms + "<br />");
document.write("booked: " + hotel.booked + "<br />gym: " + hotel.gym + "<br />");
document.write("room types: " + hotel.roomTypes[0] + ", " + hotel.roomTypes[1] + ", " + hotel.roomTypes[2]);
document.write("<br />free rooms: " + hotel.checkAvailability());
</script>

wynik skryptu


obiekt - notacja literału III

<table>
 <tr>
  <td>name:</td>
  <td id="hotelName"></td>
 </tr>
 <tr>
  <td>rooms:</td>
  <td id="hotelRooms"></td>
 </tr>
 <tr>
  <td>booked:</td>
  <td id="hotelBooked"></td>
 </tr>
 <tr>
  <td>gym:</td>
  <td id="hotelGym"></td>
 </tr>
 <tr>
  <td>room types:</td>
  <td id="hotelRoomTypes00"></td>
 </tr>
 <tr>
  <td>room types:</td>
  <td id="hotelRoomTypes01"></td>
 </tr>
 <tr>
  <td>room types:</td>
  <td id="hotelRoomTypes02"></td>
 </tr>
 <tr>
  <td>free rooms:</td>
  <td id="freeRooms"></td>
 </tr>
</table>

<script type="text/javascript">
var hotel = {
    name: 'Królewski Dwór',
    rooms: 220,
    booked: 175,
    gym: false,
    roomTypes: ['pojedynczy', 'podwójny', 'potrójny'],
    checkAvailability: function() {
        return this.rooms - this.booked;
    }
};

var elName = document.getElementById('hotelName');
elName.textContent = hotel.name;

var elRooms = document.getElementById('hotelRooms');
elRooms.textContent = hotel.rooms;

var elBooked = document.getElementById('hotelBooked');
elBooked.textContent = hotel.booked;

var elGym = document.getElementById('hotelGym');
elGym.textContent = hotel.gym;

var elRoomTypes = document.getElementById('hotelRoomTypes00');
elRoomTypes.textContent = hotel.roomTypes[0];

var elRoomTypes = document.getElementById('hotelRoomTypes01');
elRoomTypes.textContent = hotel.roomTypes[1];

var elRoomTypes = document.getElementById('hotelRoomTypes02');
elRoomTypes.textContent = hotel.roomTypes[2];

var elFreeRooms = document.getElementById('freeRooms');
elFreeRooms.textContent = hotel.checkAvailability();
</script>


wynik skryptu
name: Królewski Dwór
rooms: 220
booked: 175
gym: false
room types: pojedynczy
room types: podwójny
room types: potrójny
free rooms: 45


obiekt - notacja konstruktora new Object()

<script type="text/javascript">
var hotel = new Object();
hotel.name = 'Hotel Krwawego Barona';
hotel.rooms = 50;
hotel.booked = 41;
hotel.checkAvailability = function() {
    return this.rooms - this.booked;
};

document.write("nazwa hotelu: " + hotel.name + "<br />");
document.write("ilość pokoi: " + hotel.rooms + "<br />");
document.write("pokoje zarezerwowane: " + hotel.booked + "<br />");
document.write("wolne pokoje: " + hotel.checkAvailability());
</script>


wynik skryptu


obiekt - notacja konstruktora new Object() II

<table>
 <tr>
  <td>nazwa hotelu: </td>
  <td id="hotelName_02"></td>
 </tr>
 <tr>
  <td>ilość pokoi: </td>
  <td id="hotelRooms_02"></td>
 </tr>
 <tr>
  <td>pokoje zarezerwowane: </td>
  <td id="hotelBooked_02"></td>
 </tr>
 <tr>
  <td>wolne pokoje: </td>
  <td id="hotelFreeRooms_02"></td>
 </tr>
</table>

<script type="text/javascript">
var hotel = new Object();
hotel.name = 'Hotel Krwawego Barona II';
hotel.rooms = 100;
hotel.booked = 88;
hotel.checkAvailability = function() {
    return this.rooms - this.booked;
};

var elName = document.getElementById('hotelName_02');
elName.textContent = hotel.name;

var elRooms = document.getElementById('hotelRooms_02');
elRooms.textContent = hotel.rooms;

var elBooked = document.getElementById('hotelBooked_02');
elBooked.textContent = hotel.booked;

var elFreeRooms = document.getElementById('hotelFreeRooms_02');
elFreeRooms.textContent = hotel.checkAvailability();

</script>


wynik skryptu
nazwa hotelu: Hotel Krwawego Barona II
ilość pokoi: 100
pokoje zarezerwowane: 88
wolne pokoje: 12


obiekt - notacja konstruktora III

<table>
 <tr>
  <td id="hotelA">wolne pokoje w hotelu Aligator:</td>
 </tr>
 <tr>
  <td id="hotelB">wolne pokoje w hotelu Bocian:</td>
 </tr>
</table>

<script type="text/javascript">
function Hotel(name, rooms, booked) {
    this.name = name;
    this.rooms = rooms;
    this.booked = booked;
    this.checkAvailability = function() {
        return this.rooms - this.booked;
    };
}

var hotelAligator = new Hotel('Aligator', 30, 25);
var hotelBocian = new Hotel('Bocian', 60, 50);

var detailsA = 'wolne pokoje w hotelu ' + hotelAligator.name + ': ';
      detailsA += hotelAligator.checkAvailability();
var elHotelA = document.getElementById('hotelA');
elHotelA.textContent = detailsA;

var detailsB = 'wolne pokoje w hotelu ' + hotelBocian.name + ': ';
      detailsB += hotelBocian.checkAvailability();
var elHotelB = document.getElementById('hotelB');
elHotelB.textContent = detailsB;
</script>


wynik skryptu
wolne pokoje w hotelu Aligator:
wolne pokoje w hotelu Bocian:


delete nazwaObiektu.nazwaWłaściwości - usunięcie właściwości

<script type="text/javascript">
var hotel = new Object();
hotel.name = 'Hotel Krwawego Barona';
hotel.rooms = 50;
hotel.booked = 41;
hotel.checkAvailability = function() {
return this.rooms - this.booked;
};

delete hotel.name;
delete hotel.rooms;

document.write("nazwa hotelu: " + hotel.name + "<br />");
document.write("ilość pokoi: " + hotel.rooms + "<br />");
document.write("pokoje zarezerwowane: " + hotel.booked + "<br />");
document.write("wolne pokoje: " + hotel.checkAvailability());
</script>


wynik skryptu



dodawanie i usuwanie właściwości

<table>
 <tr>
  <td>nazwa hotelu: </td>
  <td id="nazwa_hotelu"></td>
 </tr>
 <tr>
  <td>wszystkie pokoje: </td>
  <td id="wszystkie_pokoje"></td>
 </tr>
 <tr>
  <td>zarezerwowane pokoje: </td>
  <td id="zarezerwowane_pokoje"></td>
 </tr>
 <tr>
  <td>basen: </td>
  <td id="basen"></td>
 </tr>
 <tr>
  <td>siłownia: </td>
  <td id="silownia"></td>
 </tr>
</table>

<script type="text/javascript">
var hotel = {
      name: 'Hotel Sowa',
      rooms: 40,
      booked: 33
};

hotel.basen = true;
hotel.silownia = false
delete hotel.booked;

var elName = document.getElementById('nazwa_hotelu');
elName.textContent = hotel.name;

var elWszystkiePokoje = document.getElementById('wszystkie_pokoje');
elWszystkiePokoje.textContent = hotel.rooms;

var elZarezerwowanePokoje = document.getElementById('zarezerwowane_pokoje');
elZarezerwowanePokoje.textContent = hotel.booked;

var elBasen = document.getElementById('basen');
elBasen.textContent = hotel.basen;

var elSilownia = document.getElementById('silownia')
elSilownia.textContent = hotel.silownia;

</script>


wynik skryptu
nazwa hotelu: Hotel Sowa
wszystkie pokoje: 40
zarezerwowane pokoje:
basen: true
siłownia: false


słowo kluczowe this

funkcja w zakresie globalnym
function = windowSize() {
    var width = this.innerWidth;
    var height = this.innerHeight;
    return [height, width];
}

zmienne globalne

var width = 600;
var shape = [width: 300];

var showWidth = function() {
    document.write(this.width);
}

showWidth();

metoda obiektu

var shape = {
    width: 600,
    height: 400,
    getArea: function() {
        return this.width * this.height;
    }
};

ponieważ słowo this odwołuje się do obiektu shape, odpowiada to poniższemu poleceniu:

return shape.width * shape.height;

funkcja wyrażenia jako metoda

var width = 600;
var shape = {width: 300};

var showWidth = function() {
    document.write(this.width);
};

shape.getWidth = showWidth;
shape.getWidth();


sposoby przechowywania danych

zmienne

<script type="text/javascript">
var hotel = "Mariot";
document.write('hotel');
</script>


wynik skryptu




<script type="text/javascript">
var wiadomosc = '<b>tytuł strony: </b>' + document.title + '<br />';
    wiadomosc += '<b>adres strony: </b>' + document.URL + '<br />';
document.write(wiadomosc);
</script>


wynik skryptu


tablice

<script type="text/javascript">
var hotels = ['Hotel Katowice', 'Hotel Kraków', 'Hotel Wrocław', 'Hotel Warszawa'];
document.write(hotels[0] + '<br />');
document.write(hotels[1] + '<br />');
document.write(hotels[2] + '<br />');
document.write(hotels[3] + '<br />');
</script>


wynik skryptu


<script type="text/javascript">
var hiphop = ['Kaliber 44', 'Molesta Ewenement', 'Paktofonika', 'Warszafski Deszcz'];
document.write(hiphop[0] + '<br />');
document.write(hiphop[1] + '<br />');
document.write(hiphop[2] + '<br />');
document.write(hiphop[3] + '<br />');
</script>


wynik skryptu


<script type="text/javascript">
var rock = ['Dżem', 'Hey', 'Lady Pank', 'Varius Manx'];
document.write(rock[0] + '<br />');
document.write(rock[1] + '<br />');
document.write(rock[2] + '<br />');
document.write(rock[3] + '<br />');
document.write(rock[4] + '<br />');
</script>


wynik skryptu


obiekty

<script type="text/javascript">
var hotel = {
    nazwa: 'Hotel Barona Kamila',
    pokoje: 30,
    silownia: true,
    basen: false
};
document.write(hotel.nazwa + '<br />');
document.write(hotel.pokoje + '<br />');
document.write(hotel.silownia + '<br />');
document.write(hotel.basen + '<br />');
</script>


wynik skryptu


<script type="text/javascript">
var kaliber44 = {
    nazwa: 'Kaliber 44',
    sklad: 'Abradab, Joka, Magik, DJ Feel-X',
    album01: 'Usłysz nasze demo',
    album02: 'Księga Tajemnicza. Prolog',
    album03: 'W 63 minuty dookoła świata',
    album04: '3:44',
    album05: 'Ułamek tarcia'
};
document.write(kaliber44.nazwa + '<br />');
document.write(kaliber44.sklad + '<br />');
document.write(kaliber44.album01 + '<br />');
document.write(kaliber44.album02 + '<br />');
document.write(kaliber44.album03 + '<br />');
document.write(kaliber44.album04 + '<br />');
document.write(kaliber44.album05 + '<br />');
</script>


wynik skryptu


wiele obiektów

<script type="text/javascript">
function Hotel(nazwa, pokoje) {
    this.nazwa = nazwa;
    this.pokoje = pokoje;
}
var hotel01 = new Hotel('Hotel Królewski', 200);
var hotel02 = new Hotel('Hotel Cesarski', 300);

document.write(hotel01.nazwa + '<br />');
document.write(hotel01.pokoje + '<br />');
document.write(hotel02.nazwa + '<br />');
document.write(hotel02.pokoje + '<br />');
</script>


wynik skryptu








Tablica

numer indeksu wartość
0 50
1 100
2 200
3 300


<script type="text/javascript">
var costs = [50, 100, 200, 300];
document.write(costs[0] + '<br />');
document.write(costs[1] + '<br />');
document.write(costs[2] + '<br />');
document.write(costs[3] + '<br />');
</script>


wynik skryptu








Obiekt

właściwość / klucz wartość
room1 50
room2 100
room3 200
room4 300


<script type="text/javascript">
var costs = {
    room1: 50,
    room2: 100,
    room3: 200,
    room4: 300
}
document.write(costs.room1 + '<br />');
document.write(costs.room2 + '<br />');
document.write(costs.room3 + '<br />');
document.write(costs.room4 + '<br />');
</script>


wynik skryptu








Tablica obiektów (obiekt w tablicy)

numer indeksu wartość
0 {accom: 50, food: 5, phone: 5}
1 {accom: 100, food: 10, phone: 10}
2 {accom: 200, food: 20, phone: 20}
3 {accom: 300, food: 30, phone: 30}


<script type="text/javascript">
var costs = [
    {accom: 50, food: 5, phone: 5},
    {accom: 100, food: 10, phone: 10},
    {accom: 200, food: 20, phone: 20},
    {accom: 300, food: 30, phone: 30}
]
document.write(costs[0].accom + '<br />');
document.write(costs[0].food + '<br />');
document.write(costs[0].phone + '<br />');
document.write(costs[1].accom + '<br />');
document.write(costs[1].food + '<br />');
document.write(costs[1].phone + '<br />');
document.write(costs[2].accom + '<br />');
document.write(costs[2].food + '<br />');
document.write(costs[2].phone + '<br />');
document.write(costs[3].accom + '<br />');
document.write(costs[3].food + '<br />');
document.write(costs[3].phone + '<br />');
</script>


wynik skryptu








Tablica obiektów (obiekt w tablicy) II

numer indeksu wartość
0 {name: 'Czesław', rate: 50, active: true}
1 {name: 'Grzegorz', rate: 70, active: true}
2 {name: 'Marta', rate: 90, active: false}
3 {name: 'Natalia', rate: 110, active: false}


<script type="text/javascript">
var people = [
    {name: 'Czesław', rate: 50, active: true},
    {name: 'Grzegorz', rate: 70, active: true},
    {name: 'Marta', rate: 90, active: false},
    {name: 'Natalia', rate: 110, active: false}
]
document.write(people[0].name + '<br />');
document.write(people[0].rate + '<br />');
document.write(people[0].active + '<br />');
document.write(people[1].name + '<br />');
document.write(people[1].rate + '<br />');
document.write(people[1].active + '<br />');
document.write(people[2].name + '<br />');
document.write(people[2].rate + '<br />');
document.write(people[2].active + '<br />');
document.write(people[3].name + '<br />');
document.write(people[3].rate + '<br />');
document.write(people[3].active + '<br />');
</script>


wynik skryptu








Tablice w Obiekcie

właściwość / klucz wartość
room1 items[50, 5, 5]
room2 items[100, 10, 10]
room3 items[200, 20, 20]
room4 items[300, 30, 30]








Obiekty jako Właściwości

właściwość / klucz wartość
Czesław {rate: 50, active: true}
Grzegorz {rate: 70, active: true}
Marta {rate: 90, active: false}
Natalia {rate: 110, active: false}