1。获取函数名称的3种方法

例1:

在JS权限指南中看到的一种方法:

function.prototype.getname =函数(){
返回this.name this.tostring(。比赛( /功能 *)| |({ ^(} *)( / { 1 })
}

例2:

如果当前函数是一个命名函数,则返回它的名称。如果它是匿名函数,它返回分配给它的变量名。如果是闭包中的匿名函数,则返回匿名。
复制代码代码如下所示:
无功getfnname =函数(调用者){
无功_callee = callee.tostring()。更换( / { 的 } * / g,),
梳= _callee.length > = 5050:_callee.length;
_callee = _callee.substring(0,梳);
变量名= _callee.match( / ^功能({ ^ (} +)( /);
如果(name { 1 }){
返回名称{ 1 };
}
VaR来电= callee.caller,
_caller = caller.tostring()。更换( / { 的 } * / g,);
var最后= _caller.indexof(_callee),
STR = _caller.substring(last-30,最后);
名称= str.match( / var({ ^ = } +) = /);
如果(name { 1 }){
返回名称{ 1 };
}
返回匿名
};

用途:执行这个函数在函数内进行调查,并在参数传递,arguments.callee。
复制代码代码如下所示:
函数EE(){
/ / +++++++++++++++++++++++++++++++++
无功fnname = getfnname(参数。被叫方)
/ / +++++++++++++++++++++++++++++++++
警报(fnname)
};
(EE);


例3:

复制代码代码如下所示:
功能getfuncname(_callee)
{
无功_text = _callee.tostring();
无功_scriptarr = document.scripts;
对于(var i = 0;i < _scriptarr.length;i++)
{
无功_start = _scriptarr {我}。text.indexof(_text);
如果(_start!= 1)
{
如果(函数为( ))。 /测试(_text))。
{
无功_temparr = _scriptarr {我}。text.substr(0,_start)。Split( R');
返回(_temparr { 1 } _temparr.length。取代 /(瓦尔河)|( *)/ g,更换( / = /克),);
}
其他的
返回_text.match / ^功能 *({ ^ (} +)(* R){ 1 };
}
}
}
函数A()
{
返回getfuncname(参数。被叫方);
}
函数()
{
返回getfuncname(参数。被叫方);
}
Window.alert(A());
Window.alert(B());



上述方法仍有不可解决的情况。我希望有一种方法可以给你建议。
复制代码代码如下所示:
var x =
{
运行:函数()
{
返回getfuncname(参数。被叫方);
}
}
Window.alert(x.run());

在这种情况下,无法获得函数的名称。

第二,js获取函数的所有参数和遍历对象所有属性的名称和值的方法。

1。获取所有参数
复制代码代码如下所示:
函数测试(){

对于(var i = 0;i < arguments.length;i++)
document.write(参数{我});

}

2。遍历对象所有属性的名称和值的方法。
复制代码代码如下所示:


var obj =新的对象();
obj.myname =我的目标;
obj.pro2 =23;
obj.pro3 =abcdeg ;PHP程序员站

(项目为OBJ){
document.write(属性+项目+ (+ obj {项目} + ));
document.write();
}