获取用于接口目的的函数参数名称

4 javascript

任何人都可以帮助我如何检索功能参数名称?例如:

var A = function(a, b, c) {};
Run Code Online (Sandbox Code Playgroud)

我需要在函数外部获取参数名称,即a,bc(就像字符串一样,例如放入数组[" a "," b "," c "]),所以我不仅可以验证类中对象/类属性的接口,还可以验证参数.


在此问题开始引起混淆之前,让我解释一下我的术语中的接口实现以及我需要上述问题的答案的原因:

首先,我发现了一种有趣的方式,我希望在JavaScript中使用Glen Ford实现接口:

for (var member in theInterface) {
    if ( (typeof theObject[member] != typeof theInterface[member]) ) {
        alert("object failed to implement interface member " + member);
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

(请参阅http://knol.google.com/k/programming-to-the-interface-in-javascript-yes-it-can-be-done-er-i-mean-faked查看有关实施的详细信息#).

但是,上面的实现只验证对象属性(变量和方法),这对我来说是不够的.

我需要对参数级别进行更多验证,以便实现一个接口的代码应该遵循接口方法,并且也遵循接口方法中的参数.


PS.请不要争论为什么使用界面或为什么它无用或有用; 相反,如果您可以提供更好的接口实现,它是最有用的.这里的重点是我只需要知道如何获取函数参数名称.

jer*_*jer 10

我怀疑是否有任何体面的方式,在javascript参数值传递时可以是不同类型,类型无关紧要,因此顺序.

这可能不是您正在寻找的答案,但这至少可以帮助您.

function test(a,b,c,d) {

}

//this will give us the number of parameters defined in the a function.
confirm(test.length); 
Run Code Online (Sandbox Code Playgroud)

要真正了解名称,您可以解析函数定义

  var str = window['test'].toString();
   //str will be "function test(a,b,c,d){}"
Run Code Online (Sandbox Code Playgroud)

下面是我做的一个简单的解析测试:

function test(a,b,c,d)
{

}

var b = function(x,y,  z){};
alert(getFnParamNames(b).join(","));
alert(getFnParamNames(test).join(","));

function getFnParamNames(fn){
    var fstr = fn.toString();
    return fstr.match(/\(.*?\)/)[0].replace(/[()]/gi,'').replace(/\s/gi,'').split(',');
}
Run Code Online (Sandbox Code Playgroud)