Kompozycja: koszyk ma produkty

Klasy i obiekty - JavaScript od podstaw: konsola (JavaScript)

Nie wszystko jest dziedziczeniem. Koszyk nie JEST produktem, tylko MA produkty: to kompozycja, czyli obiekt jednej klasy trzyma w polu obiekty innej. `Cart` przechowuje tablicę pozycji (`Product` i ilość) i deleguje do nich pracę: cena pozycji to cena produktu razy ilość. Dodanie tego samego produktu zwiększa ilość zamiast tworzyć nową pozycję.

class Product {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }
}

class Cart {
  constructor() {
    this.items = [];
  }

  add(product, qty = 1) {
    const item = this.items.find(i => i.product === product);
    if (item) item.qty += qty;
    else this.items.push({ product, qty });
  }

  total() {
    return this.items.reduce((sum, i) => sum + i.product.price * i.qty, 0);
  }

  print() {
    for (const { product, qty } of this.items) {
      console.log(`${product.name} x${qty} = ${(product.price * qty).toFixed(2)}`);
    }
    console.log('Razem: ' + this.total().toFixed(2));
  }
}

const pen = new Product('Długopis', 2.5);
const book = new Product('Zeszyt', 4.99);
const cart = new Cart();
cart.add(pen, 2);
cart.add(book);
cart.add(pen);
cart.print();

Ł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.