检查JavaScript函数的定义/执行中的参数的名称/值

cle*_*sha 19 javascript arguments inspection

我希望inspect.getargspec()在Javascript中使用相当于Python的东西.

我知道你可以arguments从Javascript函数中获取列表,但我真正想要的是来自最初定义的函数的参数的名称.

如果这实际上是不可能的,我将不得不通过获取函数的字符串来"强制"它,即myFunc.toString()然后解析出...内部的函数function myFunc(...).有谁知道如何以一般方式进行解析?

谢谢你的任何提示.

Jon*_*and 24

虽然我看不出有什么好的理由,

var reg = /\(([\s\S]*?)\)/;
var params = reg.exec(func);
if (params) 
     var param_names = params[1].split(',');
Run Code Online (Sandbox Code Playgroud)

假设func是您的函数的名称

  • 请注意,使用更改变量名称的缩放器并不能很好地发挥作用,所以在使用这种黑客时你应该非常小心. (3认同)
  • @Grégoire:老实说,这根本不是我提倡的做法,但OP问题相当清楚,这是获得这些论点名称的唯一方法.如果使用了一个缩小器,你所能得到的就是新的缩小名称,希望它们仍然足够. (2认同)

Jac*_*lan 5

以下函数将返回传入的任何函数的参数名称数组。

function getParamNames(func) {
    var funStr = func.toString();
    return funStr.slice(funStr.indexOf('(')+1, funStr.indexOf(')')).match(/([^\s,]+)/g);
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

getParamNames(getParamNames) // returns ['func']
getParamNames(function (a,b,c,d){}) // returns ['a','b','c','d']
Run Code Online (Sandbox Code Playgroud)