给定函数引用,获取函数的全名



如何在Actionscript中获得静态函数的完整类路径,当只给出对函数的引用时?请看下面的代码示例:

public class Tests {
     static function myFunc():void {}
}
var func:Function = Tests.myFunc;
trace(func.?) // should trace "Tests.myFunc"

这可能吗?即使是开源编辑器和调试器FlashDevelop也不能做到这一点。尝试用函数ref滚动对象,它显示的是原始指针(如12341234),而不是函数的全名。当然,使用describeType,您可以获得有关类型的信息,例如。一个类引用,但不是当你只有一个函数引用。只有一个函数引用,你怎么得到它的名字?

一般来说,只引用函数是不可能的(正如在这个接受的答案Actionscript中提到的-获取当前函数的名称)。只有两种方法可以获得名称:

  1. 使用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(相同答案中的示例),但它仅在调试播放器中有效,您必须在函数闭包中。
  • 相关内容

    • 没有找到相关文章

    最新更新