在函数名中包含变量

时间:2016-07-03 22:09:08

标签: javascript angularjs node.js

所以我有一个函数列表和一个重要的变量。我试图弄清楚如何在函数名称中使用变量。我认为有一个想法如何在角度,但不知道节点。代码如下。

number = 1;
func1(){ do stuff & add 1 };
func2(){ do stuff & add 1 };
func3(){ do stuff & add 1 };

func{{number}}() // right here

3 个答案:

答案 0 :(得分:1)

您可以通过字符串访问作为成员的函数来实现。假设函数是在this上定义的,那么下面的代码将调用所需的函数:

this['func'+number]();

我问你为什么要这样做,而不是更像func(state),然后在单个函数中处理逻辑。即使没有看到您的代码,我也几乎可以肯定您所做的并不是最好的方法。

答案 1 :(得分:0)

我会尽力说服你不要这样做。

当你知道自己需要它时,你可以依赖一个函数。如果你需要一个函数名中的变量,这可能意味着你的项目架构还没有详细说明,知道要使用哪个以及何时使用。

函数名中的数字层可能意味着您需要具有成员函数的不同对象:

var MyDoge = {
    bark: function() { /* do stuff */ },
    beAwesome: function() { /* do another stuff */ }
};

然后,根据您所处的情况,使用例如MyDoge.beAwesome()来调用它。我非常怀疑您的功能列表需要在全局范围内。

希望这有帮助。

答案 2 :(得分:0)

将数值变量的值放入函数名称是一种根据程序状态(数值)使用非常低级别技术调用函数的方法,该技术使自我记录代码更难实现,维护。

更高级别的替代方案包括使用switch语句:

switch( state) {
case 0:    /* do stuff or call func0 */ ; break;
case 1:    /* do stuff or call func1 */ ; break;
// check more cases
}

甚至不需要将状态变量作为数值,或者使用函数名数组:

var stateFuncs = [ func0, func1, func2, func3];
var number = 1;
stateFuncs[number](); // call func1

数组方法本身可以用函数的对象字典替换而不使用数字索引:

var handlerFuncs = {begin: func1, onerror: func2, end: func3};

制作“begin”,“onerror”和“end”属性名称查找值以访问所需的功能。在所有情况下,函数的命名和更新程序状态信息都是特定于应用程序逻辑以及如何使用状态的。