Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript中的函数向量_Javascript_Typescript - Fatal编程技术网

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

请注意,这是一种使代码干净的简单方法。对于更高级的用例,您可能需要查看