使用Javascript更改函数参数

使用Javascript更改函数参数,javascript,function,parameters,code-cleanup,Javascript,Function,Parameters,Code Cleanup,我使用HTML按钮调用函数: <button id="attackButton" type="button" onclick="Enemy.prototype.fight(Test)"> Attaquer </button> 此函数链接到以下两个变量: var Enemy = function (damage, life) { this.damage = damage; this.life= life; }; var Test= new

我使用HTML按钮调用函数:

<button id="attackButton" type="button" onclick="Enemy.prototype.fight(Test)">  Attaquer    </button>  
此函数链接到以下两个变量:

var Enemy = function (damage, life) 
{
    this.damage = damage;
    this.life= life;
};

var Test= new Enemy (7,20);
我想在HTML按钮中用Test2替换parameterTest,这样我的按钮现在将重定向到相同的函数,同时使用第三个变量:

var Test2= new Enemy (10,30);
我希望我说得够清楚了。谢谢

编辑:

澄清一下:一个玩家正在与不同的敌人作战。敌人有不同的护甲、生命、伤害等变量。。。战斗是一个函数,变量随参数而变化。html按钮调用该函数

玩家会在游戏中做出各种各样的动作,有时他会打架。有时他不会

我想保留一个html按钮,它总是调用相同的函数。但是参数必须在每次我需要它的时候改变

例如:

如果你走左边,那么你将与敌人1作战。 如果你站在右边,那么你将与敌人2战斗

现在敌人的全部功能是

var Enemy = function (damage, initiative, armor, lifeNow, life) 
{
    this.damage = damage;
    this.initiative = initiative;
    this.armor = armor;
    this.lifeNow = lifeNow;
    this.life = life;
};
每次我想添加一个不同的敌人时,我写下:

var enemy1= new Enemy (7, 9, 3, 15, 15);
var enemy2= new Enemy (50, 9, 3, 100, 100);

希望它有帮助:p再次感谢您

您可以将按钮点击事件中的变量提取到类似于我示例中的游戏的上下文中,这样您就可以随时更改敌人

例如,如果一方发生了变化,只需调用:changenemygame1,enemy2

var敌人=功能伤害、主动性、护甲、生命现在、生命 { 这个。损坏=损坏; 主动性=主动性; 这个。盔甲=盔甲; this.lifeNow=lifeNow; 这就是生活; }; 敌人。原型。战斗=功能敌人{ 警惕“它起作用了!”+敌人的伤害; } var Game=函数enemy1,enemy2 { this.enemy1=enemy1; 这个。enemy2=enemy2; 这个。战斗=功能{ 这个。灌肠1。战斗这个。灌肠2; } }; var enemy1=新敌人7,9,3,15,15; var enemy2=新敌人50,9,31000; var enemy3=新敌人60,9,31000,100; var game1=新的Gameenemy1,enemy2; 功能改变我的游戏,新敌人{ game.enemy2=新敌人; } 改变EnemyGame1,enemy3;
附件我必须在这里做一些假设。主要的一点是,你有很多敌人的目标,你想按顺序攻击每一个

首先,使用数组,而不是顺序命名的变量

其次,跟踪下一个要攻击的敌人:

var nextEnemy = 0; 
第三,重构代码,使攻击敌人的逻辑成为其自身的功能

攻击当前的下一个敌人,然后确定之后应该攻击哪一个

function attackNextEnemy() {
    Enemy.prototype.fight(enemies[nextEnemy]);
    nextEnemy++;
    if (!enemies[nextEnemy]) {
        nextEnemy = 0; // back to the top
    }
}
然后可以从onclick调用该函数

您还可以尝试其他一些更好的方法,如dfsq的评论中提到的,使用addEventListener而不是HTML属性,以及将nextEnemy变量放入闭包中以保持其私有性,但是Stackoverflow答案不是深入到这一层次的地方

问题更新后:

如果你走左边,那么你将与敌人1作战。如果你站在右边,那么你将与敌人2战斗

在这种情况下,您可能不想使用数组。你处理的是位置而不是序列

对象,例如:

var enemies = { 
    left: new Enemy (7,20), 
    right: new Enemy (10,30)
};
…会更有意义

然后您需要将您的攻击更改为:

var sideThePlayerIsOn = "left";


以及添加一些逻辑以根据玩家可以做的任何更改来更改SideThePlayerSon变量。

您可能应该重构代码,这样您就不会首先将测试硬编码到onclick函数中。此外,您不应该像这样调用原型方法。Test2.fightTest更有意义。敌人。原型。战斗…?@Igor-是原始问题中的代码使用的。把它转换成理智的东西超出了实际问题的范围。另请参见答案的最后一段和dfsq对该问题的评论。您好,我想这就是我正在寻找或接近的。你应该很好。永不改变的玩家与不同的敌人战斗。每个敌人都有不同的变数。使用数组当然很好,但我不知道如何编写它。我要编辑我的第一篇文章message@Boby-我已经扩展了答案。谢谢你抽出时间。我是一个初学者,我对我在这里得到的帮助感到惊讶。不幸的是,我没有得到你的代码内的一切。我会花时间考虑的。我也认为我终于找到了自己的方法。但这也引出了其他问题^^1.变量游戏没有打法。2.这个,敌人。。。只有在新游戏。。。您是对的,陛下,这不是全部代码,只是一个想法的原型,假设想要您使用它的人能够使用它;但是,如果你感到不安,它可以被扩展。敌人应该由敌人来战斗
e用户,而不是彼此。我也看不出这会如何改变每次点击按钮都会发生冲突的人。这是一个问题,因为这是问题的重点。他问了这个:敌人。原型。战斗测试:var Test2=新敌人10,30;我猜它的意思是敌人对敌人。我在评论的最后写了一行,说敌人可以随时改变,因为他没有提到他想什么时候改变them@Quentin,你能解释一下为什么这不是对老问题和经过编辑的问题的回答吗?
var enemies = { 
    left: new Enemy (7,20), 
    right: new Enemy (10,30)
};
var sideThePlayerIsOn = "left";
Enemy.prototype.fight(enemies[sideThePlayerIsOn]);