Javascript - 根据变量调用函数名称

时间:2014-01-22 15:22:29

标签: javascript function dynamic call eval

我试图调用一个名称在别处定义的函数是代码。

以下是示例代码:

Inner.testFunc = function(node) { 
 var functionName = node.substring(node, to.indexOf('@'));
 // call the function based on functionName
 [functionName + '()']
}

function something() {
 //doing something
};

...

假设functionName = something,这应该尝试调用该函数,但它没有这样做。

我尝试使用其他链接,例如Call javascript function which name is in variable,但它没有帮助。

我也尝试过使用eval():

eval(functionName + '()');

但是这回复了一些关于非法角色的事情......

5 个答案:

答案 0 :(得分:3)

您的eval电话可能无效;改为使用:

eval(functionName)(); //note () after the eval statement

在您的代码中,首先确保functionNamesomething

console.log(functionName === 'something') //true

答案 1 :(得分:2)

如果您的函数是在全局范围内定义的,那么您可以利用全局变量和全局函数作为全局范围的属性进行访问这一事实:

function something(){ console.log('Works!'); }
window['something'](); // Works!

如果不是,可能对它的引用存储为对象的属性:

var x = { something : function(){ console.log('Also works'); } };
x['something'](); // Also works

否则,无法访问。

答案 2 :(得分:0)

functionName是substring方法的返回,而不是函数本身。

答案 3 :(得分:0)

您可以创建一个函数映射,其名称为键,如下所示。然后你可以将substring的输出传递给地图并调用函数。

function myName() {
    console.log("thefourtheye");
}

var functions = {             // map of functions and their names
    name: myName
};

functions["name"]();          // Instead of "name" pass the result of substring

答案 4 :(得分:0)

它有点冗长但是如何使用case语句根据node的值运行函数。