You Deserve It! Can someone please explain the code step by step


#1

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('eggs',1);
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

@blogblaster55550,

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

StaffMember is a object constructor with 2 parameters name and discountPercent. The this keyword is only a substitute for the new object. The value of this will become when the constructor is used to create an object.

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);

For example you want to create an object me:

var me = new StaffMember("me", 20);

It means:

StaffMember('me', 20) {
   this.name = 'me',
   this.discountPercent  = 20
}

Next step.
var cashRegister = { } - it's an object with properties and methods.

cashRegister.scan('eggs',1); - it means that you call method scan of cashRegister object. Method scan have two parameters item and quantity. This method use switch statement. So, if you call scan('eggs',1), statement executed when the result of item matches case value.
Case 'eggs' call method add.

To apply your staff discount you need to pass the 'me' object to applyStaffDiscount method.

cashRegister.applyStaffDiscount(me);

After that you can get total bill. Just call property total and display that value to console.
console.log('Your bill is '+cashRegister.total);

Also you can use JavaScript toFixed() method to convert your result into a string, keeping only two decimals:

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

Hope, this explanation help you.
More info you can find:
1. w3schools.com - JavaScript Objects - http://www.w3schools.com/js/js_object_definition.asp
2. MDN - Objects overview
3. tutorialspoint.com - switch statement