JSFiddle - React, Tailwind, and code Playground
JavaScript
function HamburgerException(message) {
this.name = "HamburgerException";
this.message = message;
if (Error.captureStackTrace) {
Error.captureStackTrace(this, HamburgerException);
} else {
this.stack = (new Error()).stack;
}
}
HamburgerException.prototype = Object.create(Error.prototype);
function Hamburger(size, stuff) {
var allowedSize = [Hamburger.SIZE_SMALL, Hamburger.SIZE_LARGE];
var allowedStuff = [Hamburger.STUFF_CHEESE, Hamburger.STUFF_SALAD, Hamburger.STUFF_POTATO]
if (allowedSize.indexOf(size) != -1) {
this.size = size;
} else {
throw new HamburgerException("HamburgerException: invalid size " + size.name);
}
if (allowedStuff.indexOf(stuff) != -1) {
this.stuff = stuff;
} else {
throw new HamburgerException("HamburgerException: invalid stuff " + stuff.name);
}
this.sauces = [];
this.menu = [];
this.menu[Hamburger.SIZE_SMALL] = {price: 50, calories: 20};
this.menu[Hamburger.SIZE_LARGE] = {price: 100, calories: 40};
this.menu[Hamburger.STUFF_CHEESE] = {price: 10, calories: 20};
this.menu[Hamburger.STUFF_SALAD] = {price: 20, calories: 5};
this.menu[Hamburger.STUFF_POTATO] = {price: 15, calories: 10};
this.menu[Hamburger.SAUCE_SAUCE] = {price: 15, calories: 0};
this.menu[Hamburger.SAUCE_MAYO] = {price: 20, calories: 5};
}
Hamburger.SIZE_SMALL = 'SIZE_SMALL';
Hamburger.SIZE_LARGE = 'SIZE_LARGE';
Hamburger.STUFF_CHEESE = 'STUFF_CHEESE';
Hamburger.STUFF_SALAD = 'STUFF_SALAD';
Hamburger.STUFF_POTATO = 'STUFF_POTATO';
Hamburger.SAUCE_SAUCE = 'SAUCE_SAUCE';
Hamburger.SAUCE_MAYO = 'SAUCE_MAYO';
Hamburger.prototype.addSauces = function(sauces) {
for (var i = 0; i < sauces.length; i++) {
if (this.sauces.indexOf(sauces[i]) != -1) {
throw new HamburgerException("HamburgerException: duplicate topping " + sauces[i]);
}
if (sauces[i] == Hamburger.SAUCE_SAUCE || sauces[i] == Hamburger.SAUCE_MAYO) {
this.sauces.push(sauces[i]);
} else {
throw new...