Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
function Hamburger(size, filling) {
        this.checkSize(size);
        this.checkFilling(filling);
        this.size = size;
        this.filling = filling;
        this.extended = [];
}
Hamburger.prototype = {
    getCost: function() {
        return Hamburger.prices[this.size] + Hamburger.prices[this.filling] + this.getCostOfExtended();
    },
    getCalories: function() {
        return Hamburger.calories[this.size] + Hamburger.calories[this.filling] + this.getCaloriesOfExtended();
    },
    
    addExtended: function(type) {
        this.checkForSimilarExtended(arguments);
        for (var i = 0; i < arguments.length; i++) {
            this.checkExtended(arguments[i]);
            this.extended.push(arguments[i]);
        }
    },
    
    getCaloriesOfExtended: function() {
        var caloriesSum = 0;
        for (var n = 0; n < this.extended.length; n++) {
            caloriesSum += Hamburger.calories[this.extended[n]];
        }
        
        return caloriesSum;
    },
    
    getCostOfExtended: function() {
        var costSum = 0;
        for (var m = 0; m < this.extended.length; m++) {
            costSum += Hamburger.prices[this.extended[m]];
        }
        
        return costSum;
    },
    
    checkForSimilarExtended: function(array) {
        var f=0;
        for (var i=0; i<array.length; i++){
        for (var j=0; j<array.length; j++){
        if(array[i] === array[j] && j != i) {
            f++;
        }   
        }
        }
        if (f > 0) {
            throw new Error('Одинаковые добавки');
        }
    },
    
    checkSize: function(arg) {
            if (Hamburger.size.indexOf(arg) === -1) {
                throw new Error('Неверные данные');
            }
    },
    
    checkFilling: function(arg) {
            if (Hamburger.filling.indexOf(arg) === -1) {
                throw new Error('Неверные данные');
            }
    },
    
    checkExtended: function(arg) {
            if (Hamburger.extended.indexOf(arg) === -1) {
                throw new Error('Неверные данные');
            }
    },
    
    constructor: Hamburger
};
  Hamburger.TYPE_SMALL = 'small';
    Hamburger.TYPE_BIG = 'big';
    
    Hamburger.FILLING_CHEESE = 'cheese';
    Hamburger.FILLING_SALAD = 'salad';
    Hamburger.FILLING_POTATO = 'potato';
    
    Hamburger.EXTENDED_SEASONING = 'seasoning';
    Hamburger.EXTENDED_SAUCE = 'sauce';
    Hamburger.prices = {};
    
    Hamburger.size = [Hamburger.TYPE_SMALL, Hamburger.TYPE_BIG];
    Hamburger.filling = [Hamburger.FILLING_CHEESE, Hamburger.FILLING_SALAD, Hamburger.FILLING_POTATO];
    Hamburger.extended = [Hamburger.EXTENDED_SEASONING, Hamburger.EXTENDED_SAUCE];
    
    Hamburger.prices[Hamburger.TYPE_SMALL] = 50;
    Hamburger.prices[Hamburger.TYPE_BIG] = 100;
    Hamburger.prices[Hamburger.FILLING_CHEESE] = 10;
    Hamburger.prices[Hamburger.FILLING_SALAD] = 20;
    Hamburger.prices[Hamburger.FILLING_POTATO] = 15;
    Hamburger.prices[Hamburger.EXTENDED_SEASONING] = 15;
    Hamburger.prices[Hamburger.EXTENDED_SAUCE] = 20;
    
    Hamburger.calories = {};
    Hamburger.calories[Hamburger.TYPE_SMALL] = 20;
    Hamburger.calories[Hamburger.TYPE_BIG] = 40;
    Hamburger.calories[Hamburger.FILLING_CHEESE] = 20;
    Hamburger.calories[Hamburger.FILLING_SALAD] = 5;
    Hamburger.calories[Hamburger.FILLING_POTATO] = 10;
    Hamburger.calories[Hamburger.EXTENDED_SEASONING] = 0;
    Hamburger.calories[Hamburger.EXTENDED_SAUCE] = 5;
var hamburger = new Hamburger(Hamburger.TYPE_SMALL, Hamburger.FILLING_CHEESE);
hamburger.addExtended(Hamburger.EXTENDED_SEASONING, Hamburger.EXTENDED_SAUCE);
console.log(hamburger.getCost(), hamburger.getCalories());
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
fxslokerpro
0viewers