AS3 вызывает глобальную функцию без 'new' или со статическим методом - PullRequest
2 голосов
/ 27 сентября 2011

Я создаю служебную функцию для отладки / журналов, доступ к которой осуществляется путем импорта класса и вызова

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
    }
}
}

1 Ответ

8 голосов
/ 27 сентября 2011

Вы можете создать методы уровня пакета (я не знаю, правильный ли это термин), вот пример:

concat.as :

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

    }// end function

}// end package

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...