2015-05-01 187 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

相關問題