Javascript 从函数本身获取函数名
可能重复:Javascript 从函数本身获取函数名,javascript,Javascript,可能重复: 我想从函数本身获取函数名 Javascript: Cube : { profile : { edit : function(){ // Get function Path Cube.edit Here alert(arguments.callee.name); // Not Working } } } 代码段中的函数没有名称,它是匿名的。在profile上分配给它的属性有一个名称(ed
我想从函数本身获取函数名 Javascript:
Cube : {
profile : {
edit : function(){
// Get function Path Cube.edit Here
alert(arguments.callee.name); // Not Working
}
}
}
代码段中的函数没有名称,它是匿名的。在
profile
上分配给它的属性有一个名称(edit
),但函数没有。否,无法从函数对象获取edit
或profile.edit
或Cube.profile.edit
您可以为函数指定一个名称:
Cube : {
profile: {
edit : function edit(){
alert(arguments.callee.name);
}
}
}
…但这使用的是一个命名函数表达式,它将在IE8和更早版本上创建
您也可以这样做:
Cube : {
profile: {
edit : Cube_profile_edit
}
}
// ...
function Cube_profile_edit(){
alert(arguments.callee.name);
}
然而,在上述所有情况下,有两个问题:
参数。被调用方
,这在许多浏览器上都非常慢,并且在中无效name
属性是非标准的,这就是为什么可能需要解析function\toString
的结果。问题是,Function#toString
也是非标准的(但除了在移动浏览器上,支持范围相当广泛)您可以通过在
多维数据集
对象图中搜索引用函数的属性来避免第二个问题,但这仍然需要使用参数。被调用方
(除非您为函数指定了实名,然后在搜索时使用该实名来查找指向该函数的属性路径).代码段中的函数没有名称,它是匿名的。在profile
上分配给它的属性有一个名称(edit
),但函数没有。否,无法从函数对象获取edit
或profile.edit
或Cube.profile.edit
您可以为函数指定一个名称:
Cube : {
profile: {
edit : function edit(){
alert(arguments.callee.name);
}
}
}
…但这使用的是一个命名函数表达式,它将在IE8和更早版本上创建
您也可以这样做:
Cube : {
profile: {
edit : Cube_profile_edit
}
}
// ...
function Cube_profile_edit(){
alert(arguments.callee.name);
}
然而,在上述所有情况下,有两个问题:
参数。被调用方
,这在许多浏览器上都非常慢,并且在中无效name
属性是非标准的,这就是为什么可能需要解析function\toString
的结果。问题是,Function#toString
也是非标准的(但除了在移动浏览器上,支持范围相当广泛)您可以通过在
多维数据集
对象图中搜索引用函数的属性来避免第二个问题,但这仍然需要使用参数。被调用方
(除非您为函数指定了实名,然后在搜索时使用该实名来查找指向该函数的属性路径).你可以把你的函数命名为:edit:function edit(){…}
@Osiris我来回答这个问题。但是我没有得到我的答案<代码>警报(arguments.callee.name)代码>不适用于上面的代码示例。@elclanrs:在IE8和更早版本上创建的。@elclanrs我编辑了有问题的代码。请看。现在我想获取profile.edit()@JavedAkhtar:更改代码只是添加一个进一步的对象层是毫无意义的,它根本不会改变问题,只是会使现有的答案在编辑之前看起来很奇怪。您可以将您的函数命名为:edit:function edit(){…}
@Osiris我将讨论这个问题。但是我没有得到我的答案<代码>警报(arguments.callee.name)代码>不适用于上面的代码示例。@elclanrs:在IE8和更早版本上创建的。@elclanrs我编辑了有问题的代码。请看。现在我想获取profile.edit()@JavedAkhtar:仅仅添加一个对象层来更改代码是毫无意义的,它根本不会更改问题,只是会使现有答案在编辑之前看起来很奇怪。