Pole prywatne, getter i składnik statyczny
Klasy i obiekty - JavaScript od podstaw: konsola (JavaScript)
Hermetyzacja: pole z `#` na początku nazwy jest prywatne, więc kod spoza klasy nie może go odczytać ani zepsuć. Do odczytu służy getter `get balance()`: używamy go jak pola (`wallet.balance`), ale za kulisami działa metoda. Bez settera przypisanie `wallet.balance = ...` nic nie zmienia. Składnik `static` należy do samej klasy, nie do obiektów: tu liczy utworzone portfele i tworzy portfel z napisu.
class Wallet {
static created = 0;
#balance = 0;
constructor(owner) {
this.owner = owner;
Wallet.created++;
}
get balance() {
return this.#balance;
}
add(amount) {
if (amount > 0) this.#balance += amount;
}
static fromText(text) {
const [owner, amount] = text.split(':');
const wallet = new Wallet(owner);
wallet.add(Number(amount));
return wallet;
}
}
const wallet = new Wallet('Ola');
wallet.add(40);
wallet.add(-1000);
try {
wallet.balance = 1000000;
} catch (e) {
console.log('Nie da się przypisać:', e.name);
}
console.log(wallet.owner, wallet.balance);
const other = Wallet.fromText('Jan:25');
console.log(other.owner, other.balance, 'portfeli:', Wallet.created);Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu JavaScript od podstaw: konsola·Zaloguj się, aby zapisać postęp na koncie.