2014-01-24 42 views
3

看到这个代码:如何获取存储在变量中的函数的参数名称?

var method = function(service,worker){ 
    //.... 
} 

function getArguments(method){ 

    //what I want is: 
    //print " the arguments of the method is 'service','worker'" 
} 

getArguments(method); 

我怎样才能从变量参数的名字呢?

我知道method.arguments在该方法未被调用时将不起作用。

回答

8

您可以在该函数上调用toString,然后使用正则表达式从函数定义中提取参数列表。这里有一个简单的例子:

function getArguments(method){ 
    // strip off comments 
    var methodStr = method.toString().replace(/\/\*.*?\*\/|\/\/.*?\n/g, ''); 
    var argStr = methodStr.match(/\(([^)]*)\)/); 
    alert(argStr[1].split(/\s*,\s*/g)); 
} 

Demonstration

+1

如果你在问题中的示例代码的注释仔细一看,它看起来像他/她真正想要的参数名称的数组。 – Sam

+0

这是有保证的行为,还是特定于ES的实施? – Sam

+1

@Sam'argStr [1] .match(/ [$ \ w] +/g)'会产生一个参数名称数组(尽管它承认它不会处理Unicode标识符,如'ಠ_ಠ')。我相信'mothod.toString()'返回的字符串的精确格式可能会有所不同,但它返回函数定义的事实是ECMAScript标准的一部分。 –

相关问题