Arhum Ishtiaq
Arhum Ishtiaq

Reputation: 45

Object function not working in JS

This is a function for a simple shopping app (kinda) thing that I coded to work on my JS skills, considering my elementary experience in it. But everything works except for one thing:

The applyStaffDiscount function doesn't seem to work. Everytime I try to apply an employee discount, the program just returns the same original value that was present before trying to apply the discount. Please help and also let me know how I can improve this program.

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

var sally = new StaffMember("sally", 5);
var bob = new StaffMember("bob", 10);
var arhum = new StaffMember("arhum", 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;
    },
    applyStaffDiscount: function(employee) {
        this.total -= (this.total * (employee.discountPercent/100))
    }
};

    var cont = confirm("Are you ready to shop?")
    while (cont) {
        var user = ("Choose your function: A to Add Item, ED for Employee Discount, VT to Void Transaction or just X to Close")
        var askUser = prompt(user).toUpperCase()
        if (askUser === "A") {
            var itemName = prompt("What item would you like?", "Eggs, Milk, Magazine, Chocolate").toLowerCase()
            var itemNum = prompt("How many?")
            cashRegister.scan(itemName, itemNum)
            var cont = confirm("Your total bill is $" + cashRegister.total.toFixed(2) + ". Would you like anything else?")
        }
        else if (askUser === "ED") {
            var name1 = prompt("Please enter you name").toLowerCase()
            cashRegister.applyStaffDiscount[name1]
            alert("Your total bill is $" + cashRegister.total.toFixed(2) + ".")
}
        else if (askUser === "VT") {
            cashRegister.voidLastTransaction()
            alert("Your previous transaction has been voided. Your total bill is $" + cashRegister.total.toFixed(2) + " now.")
        }
        else if (askUser === "X") {
            cont = false
        }
        if (cont === false) {
            alert("We hope you had a good time. have a nice day!")
        }
    }

Upvotes: 2

Views: 1653

Answers (2)

Jaffer
Jaffer

Reputation: 2968

calling applyStaffDiscount should be done as shown below

cashRegister.applyStaffDiscount(name1);

Then inside applyStaffDiscount function, it should be accessed as below

this.total -= (this.total * (window[employee].discountPercent/100))

Upvotes: 2

Fearodin
Fearodin

Reputation: 144

You didn't call the function in here:

cashRegister.applyStaffDiscount[name1]

Try it with something like this:

cashRegister.applyStaffDiscount(name1);

Upvotes: 1

Related Questions