我可以为AS3中的变量分配一个getter函数吗?

时间:2011-08-10 07:47:25

标签: actionscript-3 function getter

我能做到

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

我不知道该怎么做

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

3 个答案:

答案 0 :(得分:2)

嗯,我知道的唯一方法是使用arguments.callee从内部捕获getter / setter引用。但这是一件相当奇怪的事情。 :)

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

虽然上述方法有效,但我认为你问题的正确答案是“不要”。 :)

答案 1 :(得分:0)

您可以将getter的名称保存为字符串var fn:String = "wat",然后稍后使用它来检索myObjectFromClass[fn]方法的返回值。

答案 2 :(得分:0)

我不确定你想要完成的是什么。

如果你只想保留对getter的引用,你可以将它包装在一个闭包函数中。

var mmh:Function = function():int { return wat; };