fork download
  1. Hamburger.SIZE_BIG = "BIG";
  2. Hamburger.SIZE_SMALL = "SMALL";
  3.  
  4. Hamburger.STUFFING_CHEESE = "CHEESE";
  5. Hamburger.STUFFING_SALAD = "SALAD";
  6. Hamburger.STUFFING_POTATOES = "POTATOES";
  7.  
  8. Hamburger.TOPPING_SAUCE = "SAUCE";
  9. Hamburger.TOPPING_MAYO = "MAYO";
  10.  
  11.  
  12. Hamburger.prototype.validateSize = function (size) {
  13. if (this.size != Hamburger.SIZE_BIG &&
  14. this.size != Hamburger.SIZE_SMALL) {
  15. throw new Error( this.size + " - неправильный размер" );
  16. }
  17. }
  18.  
  19. Hamburger.prototype.validateStuffing = function (stuffing) {
  20. if (this.stuffing != Hamburger.STUFFING_CHEESE &&
  21. this.stuffing != Hamburger.STUFFING_SALAD &&
  22. this.stuffing != Hamburger.STUFFING_POTATOES) {
  23. throw new Error( this.stuffing + " - неправильная начинка" );
  24. }
  25. }
  26.  
  27. function Hamburger(size, stuffing) {
  28.  
  29. this.pricesAndCalorics = {
  30. SIZE_BIG: {price: 100, caloric: 40},
  31. SIZE_SMALL: {price: 50, caloric: 20},
  32.  
  33. CHEESE: {price: 10, caloric: 20},
  34. STUFFING_SALAD: {price: 20, caloric: 5},
  35. STUFFING_POTATOES: {price: 15, caloric: 10},
  36.  
  37. TOPPING_SAUCE: {price: 15, caloric: 0},
  38. TOPPING_MAYO: {price: 20, caloric: 5}
  39. };
  40.  
  41. this.size = size;
  42. this.stuffing = stuffing;
  43.  
  44. this.validateSize(size);
  45. this.validateStuffing(stuffing);
  46.  
  47. this.toppings = [];
  48. }
  49.  
  50. Hamburger.prototype.addTopping = function (topping) {
  51.  
  52. if (this.toppings.indexOf(topping) &&
  53. topping == Hamburger.TOPPING_SAUCE) {
  54. throw new Error("Приправа добавлена более 1 раза");
  55. };
  56. if (topping == Hamburger.TOPPING_SAUCE) {
  57. this.toppings.join(Hamburger.TOPPING_SAUCE);
  58. return;
  59. };
  60.  
  61. if (this.toppings.indexOf(topping) &&
  62. topping == Hamburger.TOPPING_MAYO) {
  63. throw new Error("Майонезом полито больше 1 раза");
  64. };
  65. if (topping == Hamburger.TOPPING_MAYO) {
  66. this.toppings.join(Hamburger.TOPPING_MAYO);
  67. return;
  68. };
  69.  
  70. if (topping != Hamburger.TOPPING_SAUCE &&
  71. topping != Hamburger.TOPPING_MAYO) {
  72. throw new Error( topping + " - неизвестная добавка");
  73. }; // Оставить ретурны или добавить undefined в условия сравнения?
  74. }
  75.  
  76. Hamburger.prototype.calculateCalories = function () {
  77.  
  78. var calories = 0;
  79.  
  80. return calories;
  81. }
  82.  
  83. Hamburger.prototype.calculatePrice = function () {
  84.  
  85. var price = 0;
  86.  
  87. return price;
  88. }
  89.  
  90. // маленький гамбургер с начинкой из сыра
  91. var hamburger = new Hamburger(Hamburger.SIZE_SMALL, Hamburger.STUFFING_CHEESE);
  92. // добавка из майонеза
  93. hamburger.addTopping(Hamburger.TOPPING_MAYO);
  94. // спросим сколько там калорий
  95. console.log("Calories: %f", hamburger.calculateCalories());
  96. // сколько стоит
  97. console.log("Price: %f", hamburger.calculatePrice());
  98. // я тут передумал и решил добавить еще приправу
  99. hamburger.addTopping(Hamburger.TOPPING_SAUCE);
  100. // А сколько теперь стоит?
  101. console.log("Price with sauce: %f", hamburger.calculatePrice());
  102. console.log("Calories with sauce: %f", hamburger.calculateCalories());
Runtime error #stdin #stdout #stderr 0.55s 323136KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
js: "prog.js", line 63: exception from uncaught JavaScript throw: Error: Майонезом полито больше 1 раза