javascript - 在 es6 中动态运行函数
问题描述
我有一个包含如下功能列表的文件
export function today() {}
export function yesterday() {}
export function tomorrow() {}
export function out(input) { input() }
tomorrow
input 是函数的名称,它可以是today
或yesterday
函数之一。
我只需要动态调用today
, yesterday
,tomorrow
函数。
解决方案
正如所评论的,您将必须创建一个地图并使用它来调用函数。
您可以尝试以下方法之一:
单一出口
这种方法的好处是你有一个单一的出口,所以你知道你在出口什么。但是,如果文件变大,您必须上下滚动才能查看定义。另外,你正在流血,所以out(...)
可以调用任何函数,所以单独导出它们没有意义
function today() {}
function yesterday() {}
function tomorrow() {}
function out(input) {
module[input]();
}
var module = {
today, yesterday, tomorrow, out
}
export module;
可能的功能图
这是更值得推荐的方法。在这里,您有一张可能采取的行动的地图。因此,您也在限制可能的输入。这也将使您能够为动作和功能拥有更有意义的名称。缺点是必须维护一个列表。因此,对于每个新操作,您都必须更新此列表
export function today() {}
export function yesterday() {}
export function tomorrow() {}
const actionMap = {
TODAY: today,
YESTERDAY: yesterday,
TOMORROW: tomorrow
}
export function out(input) {
actionMap[input]();
}
推荐阅读
- node.js - 如何使用 Cloud Functions 实现 socket.IO?
- ruby-on-rails - Rails,创建时未初始化的常量
- mysql - SQL查询返回多个表中的所有数据
- python-3.x - 如何将单引号添加到列表中的值?
- r - 如何在R中做平均线
- html - 如何使固定 div 下的 div 不可滚动?
- angular - Angular 安全拦截器未在 POST 请求中添加身份验证标头
- php - Rediect->toRoute() 中的 $option 用于什么?
- javascript - 如何将所有电子表格附加到同一文件夹中?
- vega-lite - 对条形图的堆栈段进行排序