我正在为调试/日志创建一个实用程序函数,我通过导入类和调用来访问它
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)
您可以创建包级别方法(我不知道这是否是正确的术语),这是一个示例:
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)