如何定义名称等于字符串的javascript函数

时间:2012-06-15 22:07:20

标签: javascript metaprogramming

假设我有一个字符串,我想定义一个名称为该字符串的函数。我怎么能这样做?

更新:

我忘了提到我不想为属性设置匿名函数,因为我还想从函数内部动态获取函数的名称。 arguments.callee.name

2 个答案:

答案 0 :(得分:3)

像这样:

var functionName = "myfunction"
window[functionName] = function() {
    // your function here
} 

根据要求,也许这样的事情可行:

var myFunctionGenerator = function(name) {return function(message) {
    alert("hi, this is a function named '" + name + "'.  The parameter passed is '" + message + "'.");
}}

var myFunction = myFunctionGenerator('some function name');
myFunction('a parameter');
// hi, this is a function named 'some function name'.  The parameter passed is 'a parameter'.

答案 1 :(得分:1)

如果您声明了该功能,请使用eval()。只需键入您尝试执行的参数的字符串表示形式,例如:

eval("function name(){alert('a');}");

然后,您可以按正常惯例name();调用该方法。

如果您已经拥有函数名称并希望使用字符串表示形式调用该函数,则可以使用eval()方法,尽管它并不总是最佳的性能。你会有这个:

var fnName = "functionName";
var params = "param1";
var fnNameWithParams = "functionName("+params+")";
eval(fnNameWithParams);

更好的方法可能是:

var fnName = "functionName";
var params = "param1";
var fnToCall = window[fnName];
fnToCall(params);