Javascript 如何使用存储在变量中的值调用函数?

Javascript 如何使用存储在变量中的值调用函数?,javascript,jquery,function,Javascript,Jquery,Function,我有一个变量 var functionName="giveVote"; 我需要做的是,我想调用存储在var functionName中的函数。我尝试使用functionName()。但它不起作用。请帮忙 编辑基于同样的问题,我 $(this).rules("add", {txtInf: "^[a-zA-Z'.\s]{1,40}$" }); rules是一个预先定义的函数,它采用methodName:,这里我已经硬编码了txtInf。但我想在这里提供一个javascript变量,使我的代码具

我有一个变量

var functionName="giveVote";
我需要做的是,我想调用存储在var functionName中的函数。我尝试使用functionName()。但它不起作用。请帮忙

编辑基于同样的问题,我

$(this).rules("add", {txtInf: "^[a-zA-Z'.\s]{1,40}$" }); 
rules是一个预先定义的函数,它采用methodName:,这里我已经硬编码了txtInf。但我想在这里提供一个javascript变量,使我的代码具有通用性。 var methodName=“txtInf”

在这里,我想在规则函数中使用methodName之前先对其求值

$(this).rules("add", {mehtodName: "^[a-zA-Z'.\s]{1,40}$" }); 

为什么不直接将字符串传递到要调用函数的位置?为什么要先储存?这似乎更令人困惑,因为这是另一层间接寻址(最终会使代码更难调试)

例如:

$('.someSelector').click(giveVote);

我看不出做你想做的事情有什么特别的好处。

你有几个选择-两个基本的选择包括
window[functionName]()
setTimeout(functionName,0)
。试试看

编辑:如果您的变量只是函数的字符串名称,请使用这些名称;否则,如果您能够实际为变量分配函数引用(例如,
var foo=function(){};
),则可以使用
foo()
表示法,或
foo.apply(这,[])
,等等

编辑2:要在
$(this).rules()
触发之前就地计算
methodName
,只需应用上面的第一个语法(使用
窗口
对象),如下所示:

$(this).rules("add", {window[methodName](): ...});
我想这就是你要问的——如果不是,请再澄清一点,我很乐意重写一个解决方案

   var functionName="giveVote"; 
将字符串“giveVote”指定给变量functionName。 如果giveVote是函数的名称,则必须通过以下方式之一进行赋值:

如果您在编译时知道函数名,那么您可以

var functionName="giveVote"; 
但是我认为您需要动态地分配函数,然后调用它。那你得说

   var functionName=window["giveVote"]; 
然后打电话过来

functionName();
或者直接

window["giveVote"]();

这是可能的,因为您在JavaScript中声明的任何全局函数(全局函数不是任何其他对象的一部分),然后它就成为
窗口
对象的一部分。

通常没有很好的理由使用字符串传递函数引用。如果需要这样做,只需将函数分配给变量即可。因为函数是对象,所以它实际上就像对待其他变量一样简单

var giveVote = function() { ... };

var someOtherFunction = function(callback) {
    callback();
};

someOtherFunction(giveVote);

另一方面,
setTimeout(functionName,0)
仅起作用,因为setTimeout将
eval
第一个参数(如果它是字符串)。出于性能和安全考虑,最好避免这种情况。

据我所知,函数名存储在变量functionName中。现在,这与保存对函数本身的引用不同。因此,不能只使用functionName(),因为functionName在这里指的是字符串对象,而不是函数

$(this).rules("add", {mehtodName: "^[a-zA-Z'.\s]{1,40}$" }); 
因此,您需要做的是,使用functionName来获取函数对象。如上所述,如果函数已在窗口范围内定义,则可以使用窗口[functionName]。但是,根据代码的结构,您很可能将此函数作为其他对象的成员,并且您需要使用该对象来访问该函数。例如,如果变量objContainingFunction引用的对象包含functionName中定义名称的函数,则可以使用

objContainingFunction[函数名]()

关于你的编辑-

$(this).rules(“add”,{methodname:“^[a-zA-Z.\s]{1,40}$”})


你在这里的具体要求是什么?因为,正如我前面提到的,methodName在这里是一个字符串。

我同意Justin提供的解决方案,在这里再添加一个场景

您甚至可以使用存储在某个对象中的回调函数名&然后调用它

e、 g


不知道你的意思。你是说regex应该作为参数传递给函数吗?或者它定义了命名的模板?不要考虑正则表达式。我只想在使用methodName之前计算它的值。