Javascript Typescript中的函数向量
我有一个Javascript Typescript中的函数向量,javascript,typescript,Javascript,Typescript,我有一个攻击(选项:数字,敌人:怪物)方法,必须根据选择在3种不同的攻击之间进行选择 tackle(enemy: Monster){} bite(enemy: Monster){} laser(enemy: Monster){} 然而,每种方法(例如,敌人死亡)的含义都是我目前实现它的方式的三倍 if(choice == 1){ bite(enemy); * * lines of bitting implications * * * } else
攻击(选项:数字,敌人:怪物)
方法,必须根据选择在3种不同的攻击之间进行选择
tackle(enemy: Monster){}
bite(enemy: Monster){}
laser(enemy: Monster){}
然而,每种方法(例如,敌人死亡)的含义都是我目前实现它的方式的三倍
if(choice == 1){
bite(enemy);
*
*
lines of bitting implications
*
*
*
}
else if(choice == 2){
*
*
*
}
else {
*
*
*
}
我想知道是否有可能创建一个攻击\u方法[3]
,使我能够简单地实现
attack_methods[1] = tackle(enemy: Monster){};
attack_methods[2] = bite(enemy: Monster){};
attack_methods[3] = laser(enemy: Monster){};
然后
attack(choice: number, enemy: Monster, attack_methods[]: GodKnows){
attack_methods[choice](Monster);
*
*
*
implications of choice
*
*
*
}
如果可能的话,正确的实施方法
(我以前用c语言编程,我对typescript还不太了解)有一种干净的方法可以实现不同的实现,那就是有一个选择映射,并根据选择执行一个函数 为了可读性,我将把
选项的类型从数字更改为字符串
定义所有选项,如下所示:
const CHOICE_TACKLE: string = "TACKLE";
const CHOICE_BITE: string = "BITE";
const CHOICE_LASER: string = "LASER";
const tackle = (enemy: Monstor) => {
/** Tackle implementation */
}
const bite = (enemy: Monstor) => {
/** Bite implementation */
}
const laser = (enemy: Monstor) => {
/** Laset implementation */
}
定义如下功能:
const CHOICE_TACKLE: string = "TACKLE";
const CHOICE_BITE: string = "BITE";
const CHOICE_LASER: string = "LASER";
const tackle = (enemy: Monstor) => {
/** Tackle implementation */
}
const bite = (enemy: Monstor) => {
/** Bite implementation */
}
const laser = (enemy: Monstor) => {
/** Laset implementation */
}
您可以将它们放在不同的文件中,也可以将它们导入到一个文件中
一旦您有了所有的选择和实现,您就可以这样定义一个映射:
const ATTACK_IMPLEMENTATIONS = {
[CHOICE_TACKLE]: tackle,
[CHOICE_BITE]: bite,
[CHOICE_LASER]: laser
}
然后您的附加功能将是:
const attack = (choice: string, enemy: IMonstor) => {
const attackFunction = ATTACK_IMPLEMENTATIONS[choice];
if (!attackFunction) {
console.error(`No attach function implementation found for choice "${choice}"`);
return;
}
attackFunction(enemy);
}
请注意,这是一种使代码干净的简单方法。对于更高级的用例,您可能需要查看