1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    7. <title>策略模式</title>
    8. </head>
    9. <body>
    10. <div class="eg2"></div>
    11. <script>
    12. const calcPrice = (() => {
    13. const sale = {
    14. "100_10": (price) => (price -= 10),
    15. "200_25": (price) => (price -= 25),
    16. "80%": (price) => (price *= 0.8),
    17. };
    18. function calcPrice(price, type) {
    19. if (!sale[type]) return "没有这个折扣";
    20. return sale[type](price);
    21. }
    22. calcPrice.add = (type, fn) => {
    23. if (sale[type]) return "该折扣已经存在";
    24. sale[type] = fn;
    25. return "添加成功";
    26. };
    27. calcPrice.del = (type) => {
    28. delete sale[type];
    29. };
    30. return calcPrice;
    31. })();
    32. calcPrice.add("70%", (price) => {
    33. return (price *= 0.7);
    34. });
    35. const res = calcPrice(320, "70%");
    36. console.dir(res);
    37. calcPrice.del("100_10");
    38. const res2 = calcPrice(320, "100_10");
    39. console.log(res2);
    40. </script>
    41. </body>
    42. </html>