AS3使用'new'或具有静态方法调用全局函数

dav*_*vid 2 actionscript-3

我正在为调试/日志创建一个实用程序函数,我通过导入类和调用来访问它

new Log(params);

或者,我将函数更改为静态,并将其重命名为It,

那我可以叫它 Log.It(params)

我想知道是否可以设置它,所以我可以简单地调用Log(params)类似trace命令?

功能:

package 
{
public class Log 
{
    /** Gets the name of the function which is calling */
    public function Log(prefix:String = "", suffix:String = "", params:* = null):void 
    {
        var error:Error = new Error();
        var stackTrace:String = error.getStackTrace();     // entire stack trace
        var startIndex:int = stackTrace.indexOf("at ", stackTrace.indexOf("at ") + 1); //start of second line
        var endIndex:int = stackTrace.indexOf("()", startIndex);   // end of function name

        var lastLine:String = stackTrace.substring(startIndex + 3, endIndex);
        var functionSeperatorIndex:int = lastLine.indexOf('/');
        var ClassSeperatorIndex:int = lastLine.indexOf(':');

        var objectName:String = lastLine.substring(ClassSeperatorIndex+2, functionSeperatorIndex);
        var functionName:String = lastLine.substring(functionSeperatorIndex + 1, lastLine.length);

        //TODO: Loop through params

        trace(prefix +" " + "[" + objectName + "]" + " > " + functionName + " " + suffix);

        //TODO: Log to Array
        //TODO: Dispatch Event
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Tau*_*ayi 8

您可以创建包级别方法(我不知道这是否是正确的术语),这是一个示例:

concat.as:

package com.example.utils 
{
    public function concat(string1:String, string2:String):String
    {
        return string1.concat(string2);

    }// end function

}// end package
Run Code Online (Sandbox Code Playgroud)

Main.as(文档类):

package 
{
    import com.example.utils.*;
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var string1:String = "Hello";
            var string2:String = "World";
            var string3:String = concat(string1, string2);

            trace(string3); // output: HelloWorld

        }// end function

    }// end class

}// end package
Run Code Online (Sandbox Code Playgroud)