首页 > 解决方案 > 在 es6 中动态运行函数

问题描述

我有一个包含如下功能列表的文件

export function today() {}

export function yesterday() {}

export function tomorrow() {}

export function out(input) { input() }

tomorrowinput 是函数的名称,它可以是todayyesterday函数之一。

我只需要动态调用today, yesterday,tomorrow函数。

标签: javascriptecmascript-6es6-modules

解决方案


正如所评论的,您将必须创建一个地图并使用它来调用函数。

您可以尝试以下方法之一:

单一出口

这种方法的好处是你有一个单一的出口,所以你知道你在出口什么。但是,如果文件变大,您必须上下滚动才能查看定义。另外,你正在流血,所以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]();
}

推荐阅读