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.