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.