javascript - Typescript 中的函数向量

标签 javascript typescript

我有一个攻击(选择:数字,敌人:怪物)方法,必须根据选择在3种不同的攻击之间进行选择。

tackle(enemy: Monster){}
bite(enemy: Monster){}
laser(enemy: Monster){}

但是,每种方法(例如敌人死亡)的含义与我当前实现它的方式是三倍的

if(choice == 1){
   bite(enemy);
   *
   *
   lines of bitting implications
   *
   * 
   *
}

else if(choice == 2){
   *
   *
   *
}
else {
  *
  *
  *
}

我想知道是否可以创建一个 attack_methods[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还不太了解)

最佳答案

实现不同实现的一种简洁方法是拥有一个选择映射和一个根据选择执行的函数。

为了可读性,我将choice的类型从number更改为string

像这样定义所有选择:

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 */
}

您可以将它们放在不同的文件中,也可以将它们导入到一个文件中。

一旦您完成了所有选择并实现到位,您就可以像这样定义 map :

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);
}
<小时/>

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

关于javascript - Typescript 中的函数向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946893/

相关文章:

html - Angular4+ 在 HTML 模板中显示/隐藏子元素

javascript - Typescript 不从 TFS 发布生成 .js

javascript - 如何在 AngularJS 中实现 JavaScript 闭包?

javascript - 如何在 Apple Watch 中显示 D3.js 图表?

javascript - 多个组件同时访问相同的数据

debugging - Chrome Typescript 调试引用错误 'this'

javascript - 正则表达式/JavaScript : Split string to separate lines by max characters per line with looking n chars backwards for a possible whitespace?

javascript - React安装问题npx-create-react-app无法正常工作

javascript - 传单 - 启用/禁用控制

javascript - 使用lodash按键对对象进行排序,但排序后键丢失