Building a Cash Register 7/7


#1

In final lesson, there is the code.
Why there has || 0 in the add mtehod?
Is it necessary? I try to remove it and test in my computer. The solution is as same as before.


function StaffMember(name,discountPercent){
    this.name = name;
    this.discountPercent = discountPercent;
}

var sally = new StaffMember("Sally", 5);
var bob = new StaffMember("Bob", 10);

// Create yourself again as 'me' with a staff discount of 20%
var me = new StaffMember("me", 20);

var cashRegister = {
    total:0,
    lastTransactionAmount: 0,
    add: function(itemCost){
        this.total += (itemCost || 0);
        this.lastTransactionAmount = itemCost;
    },
    scan: function(item,quantity){
        switch (item){
        case "eggs": this.add(0.98 * quantity); break;
        case "milk": this.add(1.23 * quantity); break;
        case "magazine": this.add(4.99 * quantity); break;
        case "chocolate": this.add(0.45 * quantity); break;
        }
        return true;
    },
    voidLastTransaction : function(){
        this.total -= this.lastTransactionAmount;
        this.lastTransactionAmount = 0;
    },
    // Create a new method applyStaffDiscount here
    applyStaffDiscount: function(employee) {
        this.total -= this.total * (employee.discountPercent / 100);
    }
    
};

cashRegister.scan();
cashRegister.scan('milk',1);
cashRegister.scan('magazine',3);
// Apply your staff discount by passing the 'me' object 
// to applyStaffDiscount
cashRegister.applyStaffDiscount(me);

// Show the total bill
console.log('Your bill is '+cashRegister.total.toFixed(2));

#2

@jasongxpv Javascript functions don't check for the number of parameters passed to them.
So a function that had only one parameter could be called using any number of parameters and it still wouldn't error.

Any extra parameters are ignored, and if there are no parameters it is passed undefined.

so using || 0 is a fallback check for if this ever happens.
If when you called this.add you forgot to give it parameters than itemCost will be undefinied.

We don't want the program to break so in this line:

We make sure that this.total always had a number added to it.
itemCost || 0 simply means add itemCost to total. If itemCost is undefined then add 0.

Hope that helps :smiley:


You Deserve It! (Boolean Logic Operator ||)
#3

I got it! Thank you:relaxed: