如果仅给出对函数的引用,如何在Actionscript中获取静态函数的完整类路径?请参阅以下代码示例:
public class Tests {
static function myFunc():void {}
}
var func:Function = Tests.myFunc;
trace(func.?) // should trace "Tests.myFunc"
这可能吗?即使是开源编辑器和调试器FlashDevelop也无法做到这一点。尝试使用函数ref滚动对象,它显示原始指针(如12341234)而不是函数的全名。当然,使用describeType
,您可以获得有关类型的信息,即。一个类引用,但不是只有一个函数引用。只给出函数引用,你如何得到它的名字?
答案 0 :(得分:1)
一般情况下不可能,仅提及该功能(如本受理回答Actionscript - Obtain the name of the current function中所述)。获得名称的方法只有两种:
使用describeType
,但在这种情况下,您必须提供函数主机对象。您可以在第一个答案Actionscript - Obtain the name of the current function中找到示例,我也为静态函数修改了它,并使用仅在调试播放器中工作的getSavedThis
:
var name:String = getFunctionName( staticTest );
trace("1", name);
name = getFunctionName( staticTest, Astest ); //Astest the name of the class that hosts staticTest function
trace("2", name);
public static function staticTest():void
{
}
public static function getFunctionName( func:Function, parent:* = null ):String
{
if(!parent)
{
//works only in debug flash player
parent = getSavedThis(staticTest);
}
var methods:XMLList = describeType(parent)..method;
for each ( var m:XML in methods)
{
if (parent[m.@name] == func)
return m.@name;
}
return null;
}
输出:
[trace] 1 staticTest
[trace] 2 staticTest