<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
</body>
</html>
function Hamburger(size, stuffing){
this.size = Hamburger.prototype.designationSize(size);
this.stuffing = Hamburger.prototype.designationStuffing(stuffing);
this.topping = [];
}
Hamburger.prototype.settingsHamburger = { //сетинг гамбургера
"size": {
"SMALL": {"currency": 50, "calories": 20},
"BIG": {"currency": 100, "calories": 40}
},
"stuffing": {
"CHEESE": {"currency": 10, "calories": 20},
"SALAD": {"currency": 20, "calories": 5},
"POTATO": {"currency": 15, "calories": 10}
},
"topping": {
"SAUCE": {"currency": 15, "calories": 0},
"MAYO": {"currency": 20, "calories": 5}
}
};
Hamburger.prototype.designationSize = function (size){ //определение размера гамбургера
try { //если такой размер существует, добавляем его в поле(*) объекта
//(*)(не уверен так ли это называется в hamburger.size кароче;)
for(var key in this.settingsHamburger["size"]) if(size === key) return this.settingsHamburger["size"][size];
throw new ReferenceError("Введите размер гамбургера");
} catch(err) {
console.log("Ведите корректные данные(BIG/SMALL), это обязательные характеристики.\nИмя ошибки: "
+ err.name + "\nСообщение: " + err.message + "\nСтек: " + err.stack);
}
};
Hamburger.prototype.designationStuffing = function (stuffing){ //определение начинки
try { //если такая начинка существует, добавляем её в поле объекта
for(var key in this.settingsHamburger["stuffing"]) if(stuffing === key) return this.settingsHamburger["stuffing"][stuffing];
throw new ReferenceError("Ведите начинку гамбургера");
} catch(err) {
console.log("Ведите корректные данные(CHEESE/SALAD/POTATO), это обязательные характеристики.\nИмя ошибки: "
+ err.name + "\nСообщение: " + err.message + "\nСтек: " + err.stack);
}
};
Hamburger.prototype.addTopping = function(topping){ //добавляем топинг
try { //если такой топинг существует, добавляем его в поле объекта
for(var key in this.settingsHamburger["topping"]) {
if(topping === key) {
this.topping.push(this.settingsHamburger["topping"][topping]);
return;
}
}
throw new ReferenceError(topping + " - Такой добавки нет");
} catch(err) {
console.log("Ведите корректные данные(MAYO/SAUCE).\nИмя ошибки: "
+ err.name + "\nСообщение: " + err.message + "\nСтек: " + err.stack);
}
};
Hamburger.prototype.calculateCalories = function (){ //рачет каллорий
try{ //если обязательные характеристики не определены, то тров еррор
if(this.stuffing === undefined || this.size === undefined) throw new Error("Недостаточно данных");
return this.size["calories"] + this.stuffing["calories"] +
(this.topping[0] ? this.topping[0]["calories"] : 0) +
(this.topping[1] ? this.topping[1]["calories"] : 0);
} catch(err) {
console.log("Имя ошибки: " + err.name + "\nСообщение: " + err.message + "\nСтек: " + err.stack);
return 0;
}
};
Hamburger.prototype.calculatePrice = function (){ //рачет цены
try { //если обязательные характеристики не определены, то тров еррор
if(this.size === undefined || this.stuffing === undefined) throw new Error("Недостаточно данных");
return this.size["currency"] + this.stuffing["currency"] +
(this.topping[0] ? this.topping[0]["currency"] : 0) +
(this.topping[1] ? this.topping[1]["currency"] : 0);
} catch(err) {
console.log("Имя ошибки: " + err.name + "\nСообщение: " + err.message + "\nСтек: " + err.stack);
return 0;
}
};
var hamburger = new Hamburger("SMALL", "SALAD");
hamburger.addTopping("MAYO");
hamburger.addTopping("SAUCE");
console.log("SMALL/SALAD/MAYO/SAUCE");
console.log("Calories: " + hamburger.calculateCalories());
console.log("Price: " + hamburger.calculatePrice());
console.log("\n")
var hamburger2 = new Hamburger("BIG", "CHEESE");
hamburger2.addTopping("SAUCE");
console.log("BIG/CHEESE/SAUCE");
console.log("Calories: " + hamburger2.calculateCalories());
console.log("Price: " + hamburger2.calculatePrice());
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |