Przejdź do treści

Temat 09 · 2 × 45 minINF.03

Obiekty

Tablica z lekcji Tablice trzyma listę wartości pod numerami. Obiekt (object) trzyma wartości pod nazwami: produkt ma nazwa, cena i ilosc, uczeń ma imie i oceny. To najwygodniejszy sposób opisania „jednej rzeczy o wielu cechach” i podstawa wszystkiego, co w JavaScript jest złożone – od document po odpowiedzi serwera. Na egzaminie pisemnym obiekty pojawiają się regularnie, a dystraktory są zawsze te same: składnia z PHP i C++.

Literał obiektu: rekord o nazwanych polach

Obiekt zapisujesz w nawiasach klamrowych jako pary klucz: wartość oddzielone przecinkami. Klucz (nazywany też właściwością, property) to napis – zwykle piszesz go bez cudzysłowów. Wartością może być cokolwiek: liczba, napis, boolean, tablica, funkcja albo inny obiekt.

produkt.js
const produkt = {
  nazwa: 'Chleb żytni',
  cena: 6.5,
  dostepny: true,
  tagi: ['pieczywo', 'żytnie'],
};

console.log(produkt);
console.log(typeof produkt); // object
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Porównaj z tablicą: w tablicy musiałbyś pamiętać, że dane[1] to cena. W obiekcie piszesz produkt.cena i każdy to rozumie – to ważne także dla kryterium „znaczące nazewnictwo” na egzaminie praktycznym.

Tablica []
dane[0]dane[1]dane.length
kolejność, dostęp po numerze
Obiekt {}
produkt.nazwaprodukt.cenaprodukt['cena']
nazwy, dostęp po kluczu
Rys. 1. Tablica i obiekt – dwa pojemniki na wiele wartości.

Odczyt właściwości: kropka i nawiasy kwadratowe

Sprawdź się

Co wypisze ten kod?

var obiekt = { q: 1, w: 2, e: 3, r: 4 };
console.log(obiekt.w);

Są dwa sposoby odczytu i oba zwracają to samo:

dostep.js
const uczen = { imie: 'Ola', klasa: '3TP', srednia: 4.6 };

console.log(uczen.imie);        // kropka – najczęściej
console.log(uczen['imie']);     // nawiasy kwadratowe z napisem

const pole = 'srednia';
console.log(uczen[pole]);       // klucz z ZMIENNEJ – tu kropka nie zadziała
console.log(uczen.pole);        // undefined – szuka klucza o nazwie „pole”

console.log(uczen.telefon);     // undefined – nieistniejąca właściwość to nie błąd
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Zasada: kropka, gdy nazwę znasz w momencie pisania kodu; nawiasy kwadratowe, gdy nazwa siedzi w zmiennej (np. pochodzi z wartości kontrolki radio) albo zawiera spacje czy myślniki (style['font-size']).

Dodawanie, zmiana i usuwanie właściwości

Obiekt nie jest zamknięty. Przypisanie do nieistniejącego klucza tworzy go, przypisanie do istniejącego – nadpisuje wartość.

zmiany.js
const auto = { marka: 'Skoda', rok: 2018 };

auto.rok = 2019;            // zmiana istniejącej właściwości
auto.kolor = 'czerwony';    // dodanie nowej
auto['przebieg'] = 120000;  // też dodanie

delete auto.przebieg;       // usunięcie
console.log(auto);

console.log('kolor' in auto);  // true – czy klucz istnieje
console.log(Object.keys(auto)); // tablica nazw kluczy
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Na egzaminie pytanie o modyfikację brzmi np. „jak zmienić współrzędną x obiektu punkt?”. Poprawna odpowiedź zawsze zaczyna się od nazwy obiektu: punkt.x = 10;. Samo x = 10; tworzy osobną zmienną globalną, a obiekt zostaje bez zmian.

Pętla po właściwościach

Gdy chcesz przejść po wszystkich kluczach (np. wypisać kartę produktu), użyj for...in albo Object.keys z pętlą for...of z lekcji Pętle:

for-in.js
const pizza = { nazwa: 'Margherita', srednica: 32, cena: 29 };

for (const klucz in pizza) {
  console.log(klucz + ': ' + pizza[klucz]); // tu MUSZĄ być nawiasy kwadratowe
}

console.log(Object.keys(pizza).length); // 3 – liczba właściwości (obiekt nie ma .length)
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Metody i this

Właściwość, której wartością jest funkcja, nazywa się metodą (method). Wywołujesz ją jak każdą funkcję – z nawiasami. Wewnątrz metody słowo this oznacza „obiekt, na którym mnie wywołano”, więc metoda ma dostęp do pozostałych właściwości.

metody.js
const konto = {
  wlasciciel: 'Kuba',
  saldo: 120,
  wplac(kwota) {
    this.saldo += kwota;           // this = konto
  },
  opis() {
    return this.wlasciciel + ': ' + this.saldo + ' zł';
  },
};

konto.wplac(80);
console.log(konto.opis());   // Kuba: 200 zł
console.log(typeof konto.opis);   // function – bez nawiasów to sama funkcja
console.log(typeof konto.opis()); // string – z nawiasami to jej wynik
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Zapis wplac(kwota) { … } to skrót od wplac: function (kwota) { … } – oba spotkasz w zadaniach. Gdy w pytaniu widzisz x = przedmiot.nazwa();, odpowiedź brzmi: „nazwa jest metodą obiektu przedmiot, a do x trafia to, co ona zwraca”.

Gettery i settery: get i set

Getter (get) to metoda, którą czytasz jak zwykłą właściwość – bez nawiasów. Setter (set) to metoda uruchamiana przy przypisaniu. Pozwalają np. sprawdzić wartość przed zapisem albo obliczyć coś w locie. Działają od ES5 i są jednym z nielicznych „nowszych” elementów składni (obok includes()), które trafiły do arkuszy pisemnych.

Sprawdź się

Co należy wpisać w wykropkowanym miejscu, aby instrukcja osoba.j = 'PL' zapisała napis do właściwości jezyk?

var osoba = {
imie: 'Anna',
jezyk: 'EN',
set j(nazwa) {
  ..........
}
};
osoba.j = 'PL';
get-set.js
const prostokat = {
  a: 3,
  b: 4,
  get pole() {                 // czytasz bez nawiasów
    return this.a * this.b;
  },
  set bok(wartosc) {           // przypisanie uruchamia funkcję
    if (wartosc > 0) {
      this.a = wartosc;
      this.b = wartosc;        // prostokąt staje się kwadratem
    }
  },
};

console.log(prostokat.pole);  // 12 – getter, bez ()
prostokat.bok = 5;            // setter
console.log(prostokat.pole);  // 25
prostokat.bok = -2;           // setter odrzuca
console.log(prostokat.a);     // 5
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Obiekt jako cennik (słownik)

Najbardziej praktyczne użycie obiektu na egzaminie: zamiast łańcucha if/else if dla każdej opcji trzymasz ceny pod kluczami i wybierasz nawiasami kwadratowymi po wartości, która przyszła z kontrolki. W arkuszu ze stycznia 2025 („Montaż paneli”) trzy przyciski radio odpowiadały rodzajom paneli: laminowane, winylowe i deska, ze stawkami 12, 14 i 18 zł/m².

Sprawdź się

Jaką wartość będzie miała zmienna koszt?

var cennik = { laminowane: 12, winylowe: 14, deska: 18 };
var rodzaj = 'winylowe';
var koszt = cennik[rodzaj] * 10;
cennik.js
const cennik = { laminowane: 12, winylowe: 14, deska: 18 };

function obliczKoszt(rodzaj, pole) {
  const stawka = cennik[rodzaj];        // klucz z wartości radio
  if (stawka === undefined) return 0;   // nieznany rodzaj
  return stawka * pole;
}

console.log(obliczKoszt('deska', 20));      // 360
console.log(obliczKoszt('winylowe', 12.5)); // 175
console.log(obliczKoszt('parkiet', 10));    // 0
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Ten wzorzec działa też dla kodów rabatowych, nazw miast i cen kursów. W lekcji Odczyt kontrolek formularza podłączysz go do prawdziwych radio.

Tablica obiektów

Lista produktów, uczniów czy wiadomości to tablica, której każdy element jest obiektem. Łączysz pętlę po tablicy z dostępem kropką.

tablica-obiektow.js
const koszyk = [
  { nazwa: 'Zeszyt', cena: 4.5, ilosc: 3 },
  { nazwa: 'Długopis', cena: 2, ilosc: 5 },
  { nazwa: 'Plecak', cena: 89, ilosc: 1 },
];

let suma = 0;
for (const pozycja of koszyk) {
  suma += pozycja.cena * pozycja.ilosc;
}
console.log('Razem: ' + suma.toFixed(2) + ' zł'); // Razem: 112.50 zł

// najdroższa pozycja
let najdrozsza = koszyk[0];
for (let i = 1; i < koszyk.length; i++) {
  if (koszyk[i].cena > najdrozsza.cena) najdrozsza = koszyk[i];
}
console.log(najdrozsza.nazwa); // Plecak

console.log(koszyk[1].nazwa);  // Długopis – najpierw indeks, potem klucz
console.log(koszyk.length);    // 3
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Zwróć uwagę na kolejność: koszyk[1] wybiera obiekt, .nazwa – jego pole. Metody tablic takie jak map, filter i find upraszczają te pętle – poznasz je w lekcji Metody tablic wyższego rzędu.

Obiekty zagnieżdżone

Wartością właściwości może być kolejny obiekt. Dostęp to po prostu łańcuch kropek.

zagniezdzone.js
const zamowienie = {
  numer: 1042,
  klient: { imie: 'Marta', miasto: 'Gdańsk' },
  pozycje: ['Kurs JavaScript', 'Kurs React'],
};

console.log(zamowienie.klient.miasto);   // Gdańsk
console.log(zamowienie.pozycje[0]);      // Kurs JavaScript
console.log(zamowienie.pozycje.length);  // 2

zamowienie.klient.miasto = 'Sopot';      // zmiana w głębi
console.log(zamowienie.klient);
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Jeśli po drodze coś nie istnieje (zamowienie.dostawa.ulica, gdy nie ma dostawa), dostaniesz TypeError: Cannot read properties of undefined. To jeden z najczęstszych błędów w konsoli – nauczysz się go czytać w następnej lekcji.

Referencje: b = a nie kopiuje obiektu

Sprawdź się

Co wypisze ten kod?

const a = { cena: 4 };
const b = a;
b.cena = 5;
console.log(a.cena);

Liczby i napisy są kopiowane przez wartość. Obiekty (i tablice) – nie. Zmienna trzyma tylko „adres” obiektu w pamięci, czyli referencję (reference). Przypisanie b = a przykleja drugą karteczkę do tego samego obiektu.

Po lewej dwie zmienne x i y wskazują osobne wartości 5 i 7. Po prawej zmienne a i b wskazują ten sam obiekt z polami nazwa Chleb i cena 5.
Rys. 2. Typ prosty kopiuje wartość, obiekt – tylko referencję.
referencje.js
const a = { nazwa: 'Chleb', cena: 4 };
const b = a;              // ta sama „rzecz”, druga nazwa
b.cena = 5;
console.log(a.cena);      // 5
console.log(a === b);     // true – ten sam obiekt

const c = { nazwa: 'Chleb', cena: 5 };
console.log(a === c);     // false – inny obiekt, choć taka sama treść

const kopia = { ...a };   // płytka kopia (spread) – osobny obiekt
kopia.cena = 9;
console.log(a.cena);      // 5 – oryginał nietknięty
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Ta sama zasada tłumaczy, czemu funkcja, która dostanie obiekt jako argument, może go zmienić „na zewnątrz”. Szczegóły i głębokie kopie – w lekcji Referencje, kopiowanie i mutowalność.

Obiekt w konsoli

console.log(obiekt) pokazuje w konsoli przeglądarki rozwijane drzewo właściwości. Dla tablicy obiektów wygodniejsze jest console.table, a gdy chcesz obiekt jako napis (np. do akapitu), użyj JSON.stringify.

konsola-obiekt.js
const uczniowie = [
  { imie: 'Ola', srednia: 4.6 },
  { imie: 'Bartek', srednia: 3.9 },
];
console.table(uczniowie);                 // tabelka w DevTools
console.log(JSON.stringify(uczniowie[0])); // {"imie":"Ola","srednia":4.6}
console.log('Uczeń: ' + uczniowie[0]);     // Uczeń: [object Object] – tak NIE
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Sklejenie obiektu z napisem daje bezużyteczne [object Object] – zawsze wypisuj konkretne pola albo użyj JSON.stringify (więcej w lekcji Błędy, JSON i localStorage).

Na egzaminie

Ściąga

SkładniaCo robiPrzykład
const o = { k: 1, n: 'a' }literał obiektuconst p = { nazwa: 'Chleb', cena: 4 }
o.kodczyt właściwości (znana nazwa)p.cena → 4
o['k'], o[zmienna]odczyt po napisie / ze zmiennejcennik[rodzaj]
o.k = 2zmiana lub dodanie właściwościp.cena = 5
delete o.kusunięcie właściwościdelete p.cena
'k' in oczy klucz istnieje'cena' in p → true
Object.keys(o)tablica nazw kluczyObject.keys(p).length → 2
for (const k in o)pętla po kluczacho[k] daje wartość
metoda() { … }metoda; this = obiektkonto.wplac(50)
get x() { return … }getter – czytany bez ()prostokat.pole
set x(v) { this.inne = v; }setter – uruchamiany przy o.x = vosoba.j = 'PL'
o.k.m, o.tab[0]zagnieżdżeniezamowienie.klient.miasto
[{…}, {…}]tablica obiektówkoszyk[1].nazwa
b = akopiuje referencję, nie obiektb.x = 1 zmienia też a.x
{ ...a }płytka kopianowy, niezależny obiekt
JSON.stringify(o)obiekt → napis'{"k":1}'

Zadania

Zadanie 1
łatwe

Karta książki

Utwórz obiekt ksiazka z polami: tytul, autor, rok (liczba), stron (liczba) i gatunki (tablica co najmniej dwóch napisów). Następnie:

  1. Wypisz w konsoli zdanie: „Wiedźmin” – Andrzej Sapkowski (1990), 336 stron (podstaw swoje dane).
  2. Dodaj do obiektu właściwość przeczytana o wartości false, a potem zmień ją na true.
  3. Pętlą for...in wypisz każdą właściwość w formacie klucz: wartość.
  4. Wypisz liczbę gatunków i pierwszy z nich.
Pokaż rozwiązanie
ksiazka.js
const ksiazka = {
  tytul: 'Wiedźmin',
  autor: 'Andrzej Sapkowski',
  rok: 1990,
  stron: 336,
  gatunki: ['fantasy', 'opowiadania'],
};

// 1. zdanie z pól obiektu (template string z lekcji o napisach)
console.log(`„${ksiazka.tytul}” – ${ksiazka.autor} (${ksiazka.rok}), ${ksiazka.stron} stron`);

// 2. dodanie i zmiana właściwości
ksiazka.przeczytana = false;
ksiazka.przeczytana = true;

// 3. pętla po kluczach – wartość pobieramy nawiasami kwadratowymi
for (const klucz in ksiazka) {
  console.log(klucz + ': ' + ksiazka[klucz]);
}

// 4. tablica wewnątrz obiektu
console.log(ksiazka.gatunki.length); // 2
console.log(ksiazka.gatunki[0]);     // fantasy
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik
Zadanie 2
średnie

Konto z metodami

Napisz obiekt konto z właściwościami wlasciciel (napis) i saldo (liczba, start 0) oraz metodami:

  • wplac(kwota) – dodaje kwotę do salda, ale tylko gdy kwota > 0;
  • wyplac(kwota) – odejmuje kwotę, jeśli saldo na to pozwala; w przeciwnym razie wypisuje w konsoli Brak środków;
  • stan() – zwraca napis Saldo konta <właściciel>: <saldo> zł.

Dodaj getter czyPuste, który zwraca true, gdy saldo wynosi 0. Przetestuj: wpłać 200, wypłać 50, spróbuj wypłacić 500, wypisz stan() i czyPuste.

Pokaż rozwiązanie
konto.js
const konto = {
  wlasciciel: 'Kuba',
  saldo: 0,
  wplac(kwota) {
    if (kwota > 0) this.saldo += kwota;   // this = konto
  },
  wyplac(kwota) {
    if (kwota <= this.saldo) {
      this.saldo -= kwota;
    } else {
      console.log('Brak środków');
    }
  },
  stan() {
    return `Saldo konta ${this.wlasciciel}: ${this.saldo} zł`;
  },
  get czyPuste() {            // getter – czytany bez nawiasów
    return this.saldo === 0;
  },
};

konto.wplac(200);
konto.wyplac(50);
konto.wyplac(500);            // Brak środków
console.log(konto.stan());    // Saldo konta Kuba: 150 zł
console.log(konto.czyPuste);  // false
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik
Zadanie 3
średniejak na INF.03

Cennik montażu paneli

Zadanie wzorowane na arkuszu ze stycznia 2025 („Montaż paneli”), tu jeszcze bez formularza – kontrolki podłączysz w lekcji Wzorzec egzaminacyjny „kalkulator”. Klient podaje szerokość i długość pomieszczenia w metrach oraz rodzaj paneli: laminowane (12 zł/m²), winylowe (14 zł/m²) lub deska (18 zł/m²).

Napisz:

  • obiekt cennik ze stawkami pod kluczami o nazwach rodzajów,
  • funkcję obliczMontaz(szerokosc, dlugosc, rodzaj), która zwraca napis dokładnie w formacie: Pole powierzchni pomieszczenia: <pole> m2, koszt montażu <koszt> zł (np. Pole powierzchni pomieszczenia: 20 m2, koszt montażu 240 zł),
  • gdy któryś wymiar jest niedodatni lub rodzaju nie ma w cenniku, funkcja zwraca Wprowadź poprawne dane.

Przetestuj na dwóch zestawach: (4, 5, 'laminowane') i (3, 2.5, 'deska') oraz na błędnych (0, 5, 'deska').

Kryteria oceny (zero-jedynkowe, jak w „Zasadach oceniania”):

  1. Stawki zapisane w obiekcie, pobierane po kluczu z parametru (nie łańcuch if dla każdego rodzaju).
  2. Pole liczone jako iloczyn wymiarów.
  3. Koszt liczony jako pole × stawka z cennika.
  4. Napis wyniku zgodny ze wzorem co do znaku (dwukropek, przecinek, „m2”, „zł”).
  5. Dla błędnych danych zwracany komunikat Wprowadź poprawne dane.
  6. Nazwy zmiennych i funkcji znaczące (PL lub EN).
Pokaż rozwiązanie
panele.js
const cennik = { laminowane: 12, winylowe: 14, deska: 18 };

function obliczMontaz(szerokosc, dlugosc, rodzaj) {
  const stawka = cennik[rodzaj];                       // kryterium 1
  if (szerokosc <= 0 || dlugosc <= 0 || stawka === undefined) {
    return 'Wprowadź poprawne dane.';                  // kryterium 5
  }
  const pole = szerokosc * dlugosc;                    // kryterium 2
  const koszt = pole * stawka;                         // kryterium 3
  return `Pole powierzchni pomieszczenia: ${pole} m2, koszt montażu ${koszt} zł`; // kryterium 4
}

console.log(obliczMontaz(4, 5, 'laminowane')); // Pole powierzchni pomieszczenia: 20 m2, koszt montażu 240 zł
console.log(obliczMontaz(3, 2.5, 'deska'));    // Pole powierzchni pomieszczenia: 7.5 m2, koszt montażu 135 zł
console.log(obliczMontaz(0, 5, 'deska'));      // Wprowadź poprawne dane.
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Egzaminator sprawdza wynik dla dwóch różnych zestawów danych – stąd dwa poprawne testy. Gdyby w arkuszu padło „zaokrąglone do dwóch miejsc”, dodałbyś koszt.toFixed(2).

Zadanie 4
trudne

Dziennik klasy

Masz tablicę obiektów uczniowie, każdy z polami imie i oceny (tablica liczb). Napisz:

  1. funkcję srednia(oceny), która zwraca średnią z tablicy (zaokrągloną do 2 miejsc);
  2. pętlę, która każdemu uczniowi dodaje właściwość srednia;
  3. kod, który znajduje ucznia z najwyższą średnią i wypisuje Najlepszy wynik: <imie> (<srednia>);
  4. kod, który do tablicy zagrozeni wpisuje imiona uczniów ze średnią poniżej 2.0 i wypisuje je oddzielone przecinkiem (gdy nikt – Brak zagrożonych).

Dane startowe:

dane.js
const uczniowie = [
  { imie: 'Ola', oceny: [5, 4, 5, 6] },
  { imie: 'Bartek', oceny: [2, 1, 2, 2] },
  { imie: 'Zosia', oceny: [3, 4, 3, 5] },
];
Pokaż rozwiązanie
dziennik.js
const uczniowie = [
  { imie: 'Ola', oceny: [5, 4, 5, 6] },
  { imie: 'Bartek', oceny: [2, 1, 2, 2] },
  { imie: 'Zosia', oceny: [3, 4, 3, 5] },
];

// 1. średnia z tablicy liczb
function srednia(oceny) {
  let suma = 0;
  for (const ocena of oceny) suma += ocena;
  return Number((suma / oceny.length).toFixed(2));
}

// 2. dopisujemy nowe pole do każdego obiektu (zmiana przez referencję)
for (const uczen of uczniowie) {
  uczen.srednia = srednia(uczen.oceny);
}
console.table(uczniowie);

// 3. szukanie maksimum
let najlepszy = uczniowie[0];
for (const uczen of uczniowie) {
  if (uczen.srednia > najlepszy.srednia) najlepszy = uczen;
}
console.log(`Najlepszy wynik: ${najlepszy.imie} (${najlepszy.srednia})`); // Ola (5)

// 4. filtrowanie do nowej tablicy
const zagrozeni = [];
for (const uczen of uczniowie) {
  if (uczen.srednia < 2) zagrozeni.push(uczen.imie);
}
console.log(zagrozeni.length ? zagrozeni.join(', ') : 'Brak zagrożonych'); // Bartek
Konsola
Kliknij „Uruchom”, aby zobaczyć wynik

Z metodami map, filter i reduce ten kod skraca się o połowę – zobaczysz to w lekcji o metodach tablic.

Test powtórkowy

Test powtórkowy

Format jak w części pisemnej INF.03: cztery odpowiedzi, jedna poprawna.

0/0poprawnych
Sprawdź się

Dla obiektu zapisanego w kodzie wartość właściwości e pobiera instrukcja

var obiekt = { q: 1, w: 2, e: 3, r: 4 };
Sprawdź się

Aby zmienić współrzędną x obiektu punkt na 10, należy napisać

Sprawdź się

Co wypisze ten kod?

var produkt = { nazwa: 'Mleko', cena: 3 };
var klucz = 'cena';
document.write(produkt.klucz);
Sprawdź się

W kodzie x = przedmiot.nazwa(); element nazwa jest

Sprawdź się

Które z poniższych poleceń należy wpisać w setterze, aby instrukcja auto.k = 'czerwony' zapisała napis do właściwości kolor?

var auto = {
kolor: 'biały',
set k(wartosc) {
  ..........
}
};
Sprawdź się

Co wypisze ten kod?

const a = { punkty: 10 };
const b = a;
b.punkty = 20;
console.log(a.punkty);
Sprawdź się

Jaką wartość będzie miała zmienna wynik?

var ceny = { maly: 10, duzy: 15 };
var rozmiar = 'duzy';
var wynik = ceny[rozmiar] + ceny.maly;
Sprawdź się

Który zapis tworzy obiekt z właściwością imie o wartości Ala i właściwością wiek o wartości 16?

Sprawdź się

Co wypisze ten kod?

var zam = {
klient: { imie: 'Ewa', miasto: 'Opole' },
pozycje: ['A', 'B', 'C']
};
console.log(zam.klient.miasto + ' ' + zam.pozycje.length);
Sprawdź się

Co wypisze ten kod?

var kolo = {
r: 2,
get pole() { return 3 * this.r * this.r; }
};
console.log(kolo.pole);