【问题标题】:Passing a func as an arg in another function of javascript在 javascript 的另一个函数中将 func 作为 arg 传递
【发布时间】:2016-04-29 13:49:14
【问题描述】:

这是我的代码:

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

我在提示时输入字符串“Assault”,当我尝试将 classChooser 函数作为参数传递给我的 classChosen 函数时,if 之后的语句永远不会执行,但 else 会执行。我有什么错误?

【问题讨论】:

  • classChooser 不保存任何内容。我认为您应该保存 prompt("Please choose your class!... 中的值,然后将其传递给 classChosen
  • 我该怎么做?

标签: javascript function object parameters


【解决方案1】:

主要问题是你没有传递给classChosen 你认为你传递的东西。实际上,变量yourChosenClassundefined,这就是它不等于assaultClass.classType 的原因。

您需要存储玩家选择的值,或者从classChooser 返回。此外,如果classChooser 的提示是函数的一部分而不是作为参数传递,那么对您的代码会更好。所以它可能是这样的:

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

另外,选择武器可以用类似的方式重构:

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

【讨论】:

    【解决方案2】:

    你的 classChooser 函数返回未定义,所以在 类选择(类选择器()); 您将参数参数作为未定义传递。那就是执行 else 语句。

    要完成这项工作,您需要

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2013-11-06
      • 1970-01-01
      • 2017-03-06
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多