繁体   English   中英

是否可以从函数内部获取类或类名?

[英]Is it possible to get the class or class name from inside a function?

我正在尝试编写调试工具,并且希望能够获得调用方的类名。 基本上是来电显示。

因此,如果我有类似的方法,我想获取类名称:

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,并且在大多数情况下可以与JS互换。

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

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

来自文档

与以前的ActionScript版本不同,ActionScript 3.0没有arguments.caller属性。 要获得对调用当前函数的函数的引用,必须将对该函数的引用作为参数传递。 可以在arguments.callee的示例中找到此技术的示例。

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

尝试将Class名称作为参数传递:

班级代码:

package{

    import flash.utils.getQualifiedClassName;

    public class MyClass {

        public function functionInsideOfMyClass {

            myExternalToTheClassFunction( getQualifiedClassName(this) );

        }

    }

}

外部代码:

public function myExternalToTheClassFunction(classname:String):void {

    trace(classname); // MyClass

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM