2015-12-31 56 views
1

我正在尝试编写调试工具,我希望能够获取调用者的类名称。基本上,来电显示。是否可以从函数内部获取类或类名?

所以,如果我有一个方法,像这样的,我想要得到的类名:

public function myExternalToTheClassFunction():void { 
    var objectFunction:String = argument.caller; // is functionInsideOfMyClass 
    var objectFunctionClass:Object = argument.caller.this; 
    trace(object); // [Class MyClass] 
} 

public class MyClass { 

    public function functionInsideOfMyClass { 
     myExternalToTheClassFunction(); 
    } 
} 

有没有这样的事情在JavaScript或ActionScript3的? FYI AS3基于并且在大多数情况下与JS可互换。

+1

看看http://stackoverflow.com/questions/1249531/how-to-get-a-javascript-objects-class,可能有帮助 –

+1

Javascript没有'public function'或类型声明之后变量。 – Barmar

+0

@Barmar是的,你可以忽略这些。我想要得到的是调用者从该类的外部函数中获得的类。 –

回答

0

the documentation摘自:

与ActionScript,ActionScript 3.0中的早期版本中没有 arguments.caller财产。要获取 称为当前函数的函数的引用,您必须将该函数的引用作为参数传递给该函数。这种技术的一个例子可以在 中找到arguments.callee的例子。

ActionScript 3.0包含一个新的...(rest)关键字,建议使用 而不是参数类。

尝试通过Class名作为参数:

类代码:

package{ 

    import flash.utils.getQualifiedClassName; 

    public class MyClass { 

     public function functionInsideOfMyClass { 

      myExternalToTheClassFunction(getQualifiedClassName(this)); 

     } 

    } 

} 

外部代码:

public function myExternalToTheClassFunction(classname:String):void { 

    trace(classname); // MyClass 

} 
+0

仅供参考我尝试将'this'传递给静态方法并抛出错误。如果我创建一个变量'var object:Object = this;'并传递'object'但没有运行它,似乎不会引发任何编译器错误。 –

+1

是的,这是预期的行为。看看这个链接并搜索静态方法部分。 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f30.html – ElChiniNet

1

对于您可以创建一个调试的目的错误然后检查堆栈跟踪:

var e:Error = new Error(); 
trace(e.getStackTrace()); 

为您提供:

Error 
    at com.xyz::OrderEntry/retrieveData()[/src/com/xyz/OrderEntry.as:995] 
    at com.xyz::OrderEntry/init()[/src/com/xyz/OrderEntry.as:200] 
    at com.xyz::OrderEntry()[/src/com/xyz/OrderEntry.as:148] 

你可以从那里解析出 “来电显示” 的方法。

请注意,在某些非调试案例中getStackTrace()可能会返回null

相关问题