在ES6中动态运行功能

时间:2019-01-10 09:14:23

标签: javascript ecmascript-6 es6-modules

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

export function today() {}

export function yesterday() {}

export function tomorrow() {}

export function out(input) { input() }

input是函数的名称,它可以是tomorrowtodayyesterday函数之一。

我只需要动态调用todayyesterdaytomorrow函数。

4 个答案:

答案 0 :(得分:1)

如前所述,您将必须创建一个地图,并使用该地图可以调用函数。

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

单次导出

此方法的好处是您只有一个导出,因此您知道要导出的全部内容。但是,如果文件变大,则必须上下滚动以查看定义。另外,您正在无所事事,因此SELECT * FROM table WHERE has_item_3 = 'True' OR has_item_4 = 'True' ORDER BY FIELD(has_item3, 'True') DESC, FIELD(has_item4, 'True') DESC, id 可以调用任何函数,因此单独导出它们毫无意义

out(...)

可能的功能图

这是更可取的方法。在这里,您可以了解可能采取的行动。因此,您也在限制可能的输入。这还将使您能够为操作和功能使用更有意义的名称。缺点是必须维护一个列表。因此,对于每个新操作,您都必须更新此列表

function today() {}
function yesterday() {}
function tomorrow() {}
function out(input) {
  module[input]();
}

var module = {
  today, yesterday, tomorrow, out
}

export module;

答案 1 :(得分:0)

function func_abc() {
    alert("abc");
}
function call_others(function_name) {
    if (function_name == "abc") {
        func_abc();
    }
}
call_others("abc");

您可以执行此操作或使用switch语句

答案 2 :(得分:0)

function func_abc() {
    alert("abc");
}
function call_others(function_name) {
    if (function_name == "abc") {
        func_abc();
    }
}
call_others("abc");

您可以执行此操作或使用switch语句

还有一种方法是将此类函数存储在变量中,然后通过从模块对象属性访问它们来调用它们。示例:

var x = { }; 
x.f1 = function()
{
    console.log('Call me as a string!');
}

现在,您可以使用字符串中的值来调用它:

var funcstr = "f1";
x[funcstr]();

答案 3 :(得分:0)

基本上,您有两个选择。使用地图进行查找或将引用的函数移至另一个文件,然后从那里导入通配符。 (基本相同)

1。通过查找

const lookup = {today, yesterday, tomorrow}
export function today() {}
export function yesterday() {}
export function tomorrow() {}
export function out(input) { lookup[input]() }

2。将您的代码分成两个文件。 index.js fns.js
index.mjs

import * as lookup from './fns'
export function out(input) { lookup[input]() }  

fns.mjs

export function today() {}
export function yesterday() {}
export function tomorrow() {}