2015-05-01 245 views
1

Supose我有一个调用相同功能的两倍,与型动物功能各时间参数,有些是这样的:用不同的参数调用同一个函数两次

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

当我打电话的功能之一,只有第一个功能两个被执行,但不是第二个。有没有一种方法只用Javascript来做到这一点? (不是jQuery的)

下面是cuestion代码(是有点基于文本的RPG)

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

回答

4

执行某个功能时,您不必事先写入功能。

尝试

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

是的,你是赖特。我错误地在帖子中输入(发生这种情况时没有签入),但是在我的代码中正确写法,正如你所说的那样。我编辑我的帖子,我希望你现在可以更清楚地看到问题。 – Paul

1

它应该工作 -

function two(a,b){ 
    console.log(a+b); 
} 

function one(){ 
two(1,2); 
two(3,4); 
} 

one(); 

输出:

+0

是的,你是赖特。我错误地在帖子中输入(发生这种情况时没有签入),但是在我的代码中正确写法,正如你所说的那样。我编辑我的帖子,我希望你现在可以更清楚地看到问题。 – Paul

0

杉执行st函数二

这是极不可能的;你为什么相信它被执行了?在打电话之前,任何东西,或执行任何东西,有一个语法错误,大概就像“意外令牌;”,因为语法

function two(a, b); 

无效;函数定义必须在花括号中包含一个主体。如果你看着控制台,你会看到错误;你是否?它必须是:

function two(a, b) { } 

但很显然,你只是想调用的函数,在这种情况下,你应该使用的two(a, b)基本函数调用语法。 function用于定义函数,而不是调用它们。

+0

是的,你是赖特。我错误地在帖子中输入(发生这种情况时没有签入),但是在我的代码中正确写法,正如你所说的那样。我编辑我的帖子,我希望你现在可以更清楚地看到问题。 – Paul

相关问题