gpt4 book ai didi

javascript - 使用不同的参数调用同一个函数两次

转载 作者:行者123 更新时间:2023-11-30 08:37:38 25 4
gpt4 key购买 nike

假设我有一个函数调用同一个函数两次,每次都有不同的参数,有些像这样:

function one(){
two(a,b);
two(c,d);
}

当我调用函数一时,只执行了第一个函数二,而没有执行第二个。有没有办法仅在 Javascript 中执行此操作? (不是 Jquery)

这是提示中的代码(是一个基于文本的小型 Angular 色扮演游戏)

window.onload = init;

function init(){

document.onmousedown = function disableselect(e) {return false;};

/*ELEMENTS*/

var monsterPicture = document.createElement('div');
monsterPicture.setAttribute('class', 'monsterPicture');
monsterPicture.style.position = 'absolute';
monsterPicture.style.top = '0';
monsterPicture.style.right = '0';
monsterPicture.style.bottom = '0';
monsterPicture.style.left = '0';
monsterPicture.style.height = '350px';
monsterPicture.style.width = '350px';
monsterPicture.style.margin = 'auto';
monsterPicture.style.backgroundColor = 'grey';
document.body.appendChild(monsterPicture);

var textInfo = document.createElement('textarea');
textInfo.setAttribute('class', 'textInfo');
textInfo.style.position = 'absolute';
textInfo.style.top = '0';
textInfo.style.bottom = '0';
textInfo.style.right = '0';
textInfo.style.height = '350px';
textInfo.style.width = '250px';
textInfo.style.margin = 'auto 50px auto auto';
textInfo.style.backgroundColor = 'white';
textInfo.style.overflowY = 'hidden';
textInfo.style.resize = 'none';
textInfo.readOnly = 'true';
textInfo.disabled = 'true';
textInfo.style.cursor = "default";
document.body.appendChild(textInfo);

var statsArea = document.createElement('div');
statsArea.setAttribute('class', 'statsArea');
statsArea.style.position = 'absolute';
statsArea.style.top = '0';
statsArea.style.top = '0';
statsArea.style.bottom = '0';
statsArea.style.right = '0';
statsArea.style.height = '350px';
statsArea.style.width = '200px';
statsArea.style.margin = 'auto 700px auto auto';
document.body.appendChild(statsArea);


var heroInfo = document.createElement('textarea');
heroInfo.setAttribute('class', 'heroInfo');
heroInfo.style.height = '160px';
heroInfo.style.width = '200px';
heroInfo.style.marginTop = '10px';
heroInfo.style.backgroundColor = 'white';
heroInfo.style.overflowY = 'hidden';
heroInfo.style.resize = 'none';
heroInfo.readOnly = 'true';
heroInfo.disabled = 'true';
heroInfo.style.cursor = "default";
document.body.appendChild(heroInfo);

var monsterInfo = document.createElement('textarea');
monsterInfo.setAttribute('class', 'monsterInfo');
monsterInfo.style.height = '160px';
monsterInfo.style.width = '200px';
monsterInfo.style.backgroundColor = 'white';
monsterInfo.style.overflowY = 'hidden';
monsterInfo.style.resize = 'none';
monsterInfo.readOnly = 'true';
monsterInfo.disabled = 'true';
monsterInfo.style.cursor = "default";
document.body.appendChild(monsterInfo);

statsArea.appendChild(monsterInfo);
statsArea.appendChild(heroInfo);




/*CONSTRUCTOR FUNCTIONS*/

function character (name, hitpoints, armorclass, attackbonus, weapondamage) {
this.name = name;
this.hitPoints = hitpoints;
this.armorClass = armorclass;
this.attackBonus = attackbonus;
this.weaponDamage = weapondamage;
this.stats = function(){
return this.name + "\n" +
"Hit Points: " + this.hitPoints + "\n" +
"Armor Class: " + this.armorClass + "\n" +
"Attack Bonus: " + this.attackBonus + "\n" +
"Weapon Damage: " + this.weaponDamage;
};
this.alive = true;
this.reset = function (){
this.hitPoints = hitpoints;
this.armorClass = armorclass;
this.attackBonus = attackbonus;
this.weaponDamage = weapondamage;
};
}

var Arquer = new character("Arquer", 15, 6, 5, 8);

function selectMonster () {
var werewolf = new character("Werewolf", 15, 4, 4, 3);
var goblin = new character("Goblin", 15, 4, 4, 3);
switch(Math.floor(Math.random()*2)+1){
case 1: return werewolf;
case 2: return goblin;
}
}


var buttonAttack= document.createElement('input');
buttonAttack.setAttribute('type','button');
buttonAttack.setAttribute('value','Attack');
document.body.appendChild(buttonAttack);

var current_monster = selectMonster();

heroInfo.value = Arquer.stats() + "\n" + "Alive: " + Arquer.alive;
monsterInfo.value = current_monster.stats() + "\n" + "Alive: " + current_monster.alive;

buttonAttack.onclick = function(){
if (current_monster.hitPoints <= 0){current_monster = selectMonster();monsterInfo.value = current_monster.stats() + "\n" + "Alive: " + current_monster.alive;}
else{battle(Arquer, current_monster);}
};


function battle (hero, monster){

if(hero.alive===true && monster.alive===true){
var heroIniciative = Math.floor(Math.random()*20)+1;
var monsterIniciative = Math.floor(Math.random()*20)+1;
var attacker;
var defender;
var attackerInfo;
var defenderInfo;
/*INICIATIVE ROLL*/
if (heroIniciative >= monsterIniciative){
attacker = hero;
defender = monster;
attackerInfo = heroInfo;
defenderInfo = monsterInfo;
textInfo.value += attacker.name + " attacks first!: " + heroIniciative + " vs " + monsterIniciative + "\n";
textInfo.scrollTop = textInfo.scrollHeight;
attack(attacker, defender, attackerInfo, defenderInfo);
attack(defender, attacker, defenderInfo, attackerInfo);
}
else {
attacker = monster;
defender = hero;
attackerInfo = monsterInfo;
defenderInfo = heroInfo;
textInfo.value += attacker.name + " attacks first!: " + monsterIniciative + " vs " + heroIniciative + "\n",
textInfo.scrollTop = textInfo.scrollHeight;
attack(attacker, defender, attackerInfo, defenderInfo);
attack(defender, attacker, defenderInfo, attackerInfo);
}
check_defeat(attacker, defender, attackerInfo, defenderInfo);
}
else {reset (hero, monster);
}
}


function attack (attacker, defender, attackerInfo, defenderInfo){
var d20 = Math.floor(Math.random()*20)+1;
var d_wp = Math.floor(Math.random()*attacker.weaponDamage)+1;
/*ROUND ONE*/
if (d20+attacker.attackBonus>defender.armorClass){
textInfo.value += attacker.name +" d20+" + attacker.attackBonus+": " + (d20+attacker.attackBonus)+ " vs AC " + defender.armorClass + "\n" + attacker.name +" hits! d" + attacker.weaponDamage + ": " + d_wp + "\n";
textInfo.scrollTop = textInfo.scrollHeight;
defender.hitPoints = defender.hitPoints - d_wp;
defenderInfo.value = defender.stats();
defenderInfo.append("\n" + "Alive: " + defender.alive);
}
else {
textInfo.value += attacker.name + " misses! d20+" + attacker.attackBonus+": " + (d20+attacker.attackBonus)+ " vs AC " + defender.armorClass;
textInfo.scrollTop = textInfo.scrollHeight;
defenderInfo.value = defender.stats();
defenderInfo.append("\n" + "Alive: " + defender.alive);
}}


function check_defeat (attacker, defender, attackerInfo, defenderInfo) {
if (attacker.hitPoints <= 0){
attacker.hitPoints = 0;
attacker.alive = false,
attackerInfo.value = attacker.stats();
attackerInfo.append("\n" + "Alive: " + attacker.alive);
textInfo.value += "\n" +defender.name + " killed " + attacker.name + "!";
textInfo.scrollTop = textInfo.scrollHeight;
}
if (defender.hitPoints <= 0){
defender.hitPoints = 0;
defender.alive = false,
defenderInfo.value = defender.stats();
defenderInfo.append("\n" + "Alive: " + defender.alive);
textInfo.value += "\n" + attacker.name + " killed " + defender.name + "!";
}
}

function reset (hero, monster) {
if (hero.alive===false){
hero.reset();
hero.alive = true;
heroInfo.value = hero.stats();
heroInfo.append("\n" + "Alive: " + hero.alive);
}
if (monster.alive===false){
monster.reset();
monster.alive = true;
monsterInfo.value = monster.stats();
monsterInfo.append("\n" + "Alive: " + monster.alive);
}
}
}

(出于某种原因,它在 jsfiddle 中不起作用)。问题出在函数之争上。

function battle (hero, monster){

if(hero.alive===true && monster.alive===true){
var heroIniciative = Math.floor(Math.random()*20)+1;
var monsterIniciative = Math.floor(Math.random()*20)+1;
var attacker;
var defender;
var attackerInfo;
var defenderInfo;
/*INICIATIVE ROLL*/
if (heroIniciative >= monsterIniciative){
attacker = hero;
defender = monster;
attackerInfo = heroInfo;
defenderInfo = monsterInfo;
textInfo.value += attacker.name + " attacks first!: " + heroIniciative + " vs " + monsterIniciative + "\n";
textInfo.scrollTop = textInfo.scrollHeight;
attack(attacker, defender, attackerInfo, defenderInfo);
attack(defender, attacker, defenderInfo, attackerInfo);
}
else {
attacker = monster;
defender = hero;
attackerInfo = monsterInfo;
defenderInfo = heroInfo;
textInfo.value += attacker.name + " attacks first!: " + monsterIniciative + " vs " + heroIniciative + "\n",
textInfo.scrollTop = textInfo.scrollHeight;
attack(attacker, defender, attackerInfo, defenderInfo);
attack(defender, attacker, defenderInfo, attackerInfo);
}
check_defeat(attacker, defender, attackerInfo, defenderInfo);
}
else {reset (hero, monster);
}
}

当我调用它时,它只执行第一个函数攻击,而不执行第二个。

buttonAttack.onclick = function(){
if (current_monster.hitPoints <= 0){current_monster = selectMonster();monsterInfo.value = current_monster.stats() + "\n" + "Alive: " + current_monster.alive;}
else{battle(Arquer, current_monster);}
};

最佳答案

执行函数时,您不必预先编写函数。

尝试

function one(){
two(a,b);
two(c,d);
}

关于javascript - 使用不同的参数调用同一个函数两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29988335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com