Могу ли я назначить функцию получения переменной в AS3? - PullRequest
1 голос
/ 10 августа 2011

Я могу сделать

function yea ():int {
...
}
var cool:Function=yea;

Я не знаю, как сделать что-то вроде

function get wat ():int {
...
}
var mmmh:Function=wat; // this (tries to) assign the wat returned value

Ответы [ 3 ]

2 голосов
/ 10 августа 2011

Что ж, единственный способ, который я знаю, - это захват ссылок на методы получения / установки изнутри них с помощью arguments.callee.Но это довольно странная вещь.:)

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.utils.getTimer;

    public class GetterTest extends Sprite
    {
        private var getterRef:Function;
        private var setterRef:Function;

        private var testValue:int = 0;

        public function GetterTest()
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        }

        private function onMouseDown(event:Event):void
        {
            if (getterRef != null) {
                setterRef(getTimer());
                trace("references: test = ", getterRef());
            } else {
                test = getTimer();
                trace("direct: test = ", test);
            }
        }

        private function get test():int
        {
            trace("TEST! getter");
            getterRef = arguments.callee;           
            return testValue;
        }
        private function set test(value:int):void
        {           
            trace("TEST! setter");
            setterRef = arguments.callee;
            testValue = value;
        }
    }
}

Хотя вышесказанное работает, я думаю, что правильный ответ на ваш вопрос "не".:)

0 голосов
/ 10 августа 2011

Я не уверен, чего вы пытаетесь достичь.

Если вы просто хотите сохранить ссылку на геттер, вы можете просто обернуть ее в функцию замыкания.

var mmh:Function = function():int { return wat; };
0 голосов
/ 10 августа 2011

вы можете сохранить имя получателя в виде строки var fn:String = "wat", а затем использовать его позже, чтобы получить возвращаемое значение метода с помощью myObjectFromClass[fn].

...