Ahmed Magdy
Ahmed Magdy

Reputation: 341

Passing a func as an arg in another function of javascript

Here is my code :

//Player Loadout
//Version 1.0 by Madi Magdy

function Player(name,sex,side) {
    this.name = name;
    this.sex = sex;
    this.side = side;
}

//var newPlayer = new Player(prompt("Please enter your name"),prompt("Please enter your sex"),prompt("Please enter your nationality"));

//console.log("Hello " + newPlayer.name + "!");

function Class(classType,mainWeapon,sideWeapon) {
    this.classType = classType;
    this.mainWeapon = mainWeapon;
    this.sideWeapon = sideWeapon;
}
assaultClass = new Class("Assault","M416","M9");
engineerClass = new Class("Engineer","AK5C","P226");
reconClass = new Class("Recon","SRR61","Deagle44");
supportClass = new Class("Support","M249","M1911");

classChooser = function(playerChoice) {
    if (playerChoice === assaultClass.classType) {
        console.log("You chose the " + assaultClass.classType + " " + "class! Your default weapons are " + assaultClass.mainWeapon + " " + "and " + assaultClass.sideWeapon);
    }
    else if (playerChoice === engineerClass.classType) {
        console.log("You chose the " + engineerClass.classType + " " + "class! Your default weapons are " + engineerClass.mainWeapon + " " + "and " + engineerClass.sideWeapon);
    }
    else if (playerChoice === reconClass.classType) {
        console.log("You chose the " + reconClass.classType + " " + "class! Your default weapons are " + reconClass.mainWeapon + " " + "and " + reconClass.sideWeapon);
    }
    else if (playerChoice === supportClass.classType) {
        console.log("You chose the " + supportClass.classType + " " + "class! Your default weapons are " + supportClass.mainWeapon + " " + "and " + supportClass.sideWeapon);
    }


};

classChooser(prompt("Please choose your class! Type in Assault or Engineer or Recon or Support!"));


classWeapons = function(weapon,attach,camo) {
    this.weapon = weapon;
    this.attach = attach;
    this.camo = camo;
};

yourClassWeapons = new classWeapons(prompt("Choose your weapon"),prompt("Choose your weapon attachment"),prompt("Choose your camouflage color"));

var classChosen = function(yourChosenClass) {
    if (yourChosenClass === assaultClass.classType) {
        console.log("Your weapons are listed as follows");
        console.log(yourClassWeapons);
    }
    else {
        console.log("NOPE");
    }
};

classChosen(classChooser()); //I also tried classChosen(classChooser);

I enter the string "Assault" when prompted and when I try to pass the classChooser function as an argument in my classChosen function, the statement after the if never executes but the else does. What mistake do I have?

Upvotes: 1

Views: 41

Answers (2)

Z.Z.
Z.Z.

Reputation: 704

Your classChooser function returns undefined, so in classChosen(classChooser()); You pass in an argument parameter as undefined. That is else statement gets executed.

To make this work, you need to

classChooser = function(playerChoice) {
     var returnType;
     if (playerChoice === assaultClass.classType) {
         console.log("You chose the " + assaultClass.classType + " " + "class! Your default weapons are " + assaultClass.mainWeapon + " " + "and " + assaultClass.sideWeapon);
         return assaultClass.classType;
    }
    else if (playerChoice === engineerClass.classType) {
        console.log("You chose the " + engineerClass.classType + " " + "class! Your default weapons are " + engineerClass.mainWeapon + " " + "and " + engineerClass.sideWeapon);
        returnType = engineerClass.classType;
    }
    else if (playerChoice === reconClass.classType) {
        console.log("You chose the " + reconClass.classType + " " + "class! Your default weapons are " + reconClass.mainWeapon + " " + "and " + reconClass.sideWeapon);

        returnType = reconClass.classType;
    }
    else if (playerChoice === supportClass.classType) {
        console.log("You chose the " + supportClass.classType + " " + "class!     Your default weapons are " + supportClass.mainWeapon + " " + "and " + supportClass.sideWeapon);
        returnType = supportClass.classType;

    }
    return returnType;
};
classChoosen(classChooser(prompt("Please choose your class! Type in Assault or Engineer or Recon or Support!")));

Upvotes: 2

jonhopkins
jonhopkins

Reputation: 3842

The main problem is that you are not passing to classChosen what you think you are passing. The way it is, the variable yourChosenClass is undefined, which is why it isn't equal to assaultClass.classType.

You need to either store the value that the player chose, or return it from classChooser. Also, it would be much better for your code if the prompt for classChooser was part of the function instead of being passed as a parameter. So it could be something like this:

classChooser = function() {
    var playerChoice = prompt("Please choose your class! Type in Assault or Engineer or Recon or Support!");
    if (playerChoice === assaultClass.classType) {
        console.log("You chose the " + assaultClass.classType + " " + "class! Your default weapons are " + assaultClass.mainWeapon + " " + "and " + assaultClass.sideWeapon);
    }
    else if (playerChoice === engineerClass.classType) {
        console.log("You chose the " + engineerClass.classType + " " + "class! Your default weapons are " + engineerClass.mainWeapon + " " + "and " + engineerClass.sideWeapon);
    }
    else if (playerChoice === reconClass.classType) {
        console.log("You chose the " + reconClass.classType + " " + "class! Your default weapons are " + reconClass.mainWeapon + " " + "and " + reconClass.sideWeapon);
    }
    else if (playerChoice === supportClass.classType) {
        console.log("You chose the " + supportClass.classType + " " + "class! Your default weapons are " + supportClass.mainWeapon + " " + "and " + supportClass.sideWeapon);
    }
    return playerChoice;
};

classChosen(classChooser());
// or...
// var playerChosenClass = classChooser();
// classChosen(playerChosenClass);

Additionally, choosing the weapon can be refactored in a similar way:

weaponChooser = function() {
    var weapon = prompt("Choose your weapon");
    var attachment = prompt("Choose your weapon attachment");
    var camo = prompt("Choose your camouflage color");
    return new classWeapons(weapon, attachment, camo);
}

yourClassWeapons = weaponChooser();

Upvotes: 2

Related Questions