如何在Actionscript中获得静态函数的完整类路径,当只给出对函数的引用时?请看下面的代码示例:
public class Tests {
static function myFunc():void {}
}
var func:Function = Tests.myFunc;
trace(func.?) // should trace "Tests.myFunc"
这可能吗?即使是开源编辑器和调试器FlashDevelop也不能做到这一点。尝试用函数ref滚动对象,它显示的是原始指针(如12341234),而不是函数的全名。当然,使用describeType
,您可以获得有关类型的信息,例如。一个类引用,但不是当你只有一个函数引用。只有一个函数引用,你怎么得到它的名字?
一般来说,只引用函数是不可能的(正如在这个接受的答案Actionscript中提到的-获取当前函数的名称)。只有两种方法可以获得名称:
-
使用
describeType
,但在这种情况下,您必须提供函数宿主对象。您可以在第一个答案Actionscript中找到示例-获取当前函数的名称,我也为静态函数修改了它,并利用仅在调试播放器中工作的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
- 使用getStackTrace(相同答案中的示例),但它仅在调试播放器中有效,您必须在函数闭包中。