JavaScriptУрок 16 из 16
Итоговый проект: корзина интернет-магазина
Пора собрать всё вместе. Корзина небольшого магазина — это класс, массивы, их методы, ошибки, замыкание, JSON и асинхронная оплата в одной программе.
Главное
- Cart хранит items и умеет add, total и lines
- Неизвестный товар — throw new Error, а снаружи его ловит try...catch
- Сумма считается через reduce, строки чека — через map с деструктуризацией
- Промокод живёт в замыкании: срабатывает один раз, второй раз скидки нет
- Оплата — промис с setTimeout, результат ждём через await
Пример
// The pieces of the project in one placeconst prices = { mug: 12, cap: 18 };const order = [["mug", 2], ["cap", 1]]; const sum = order.reduce((total, [id, qty]) => total + prices[id] * qty, 0);console.log(`Sum: ${sum}`); function makeLimiter(max) { let used = 0; return () => (used < max ? `ok ${++used}` : "limit reached");}const tryCode = makeLimiter(1);console.log(tryCode(), tryCode()); const saved = JSON.stringify({ sum });console.log(saved, JSON.parse(saved).sum === sum);Пример — разминка перед проектом: reduce с деструктуризацией пары [id, qty], ограничитель на замыкании и проверка, что JSON вернул ту же сумму.
Задание
Как пользоваться редактором⌘ Enter или Ctrl Enter — запустить код, ⇧ ⌘ Enter — проверить задание.Tab и Shift Tab сдвигают строку или выделение; Esc, затем Tab — выйти из редактора.Проверка сравнивает то, что напечатала программа, с заданием; пробелы в конце строк не важны.После двух неудачных проверок можно открыть решение. Ваш код сохраняется в этом браузере.Допишите корзину. add(id, qty) ищет товар в catalog (нет товара — throw new Error(`Unknown product: ${id}`)) и либо увеличивает qty, либо добавляет { id, ...product, qty }; total — сумма price * qty; lines() возвращает строки вида Mug x3 = 36; makePromo даёт скидку percent процентов только один раз. Вывод: Unknown product: sofa, Mug x3 = 36, T-shirt x1 = 25, Total: 54.90, Promo again: 61.00, {"items":2,"total":54.9} и Paid 54.90.
Вывод
Здесь появится то, что напечатает программа.