Actionscript - Как да отмените получаването на предварително дефинирани свойства на класове?

Имам клас, който разширява прокси класа и има статично дефинирана членска променлива, наречена num:

public dynamic class TestProxy extends Proxy
{
 private var num:Number = 100;

 public function TestProxy()
 {
  super();
 }

 override flash_proxy function getProperty(name:*):*
 {
  trace("***** "+name);
 }
}

Искам getProperty() да се извиква при опит за достъп до num. Работи за всяко поле, което все още не съществува, но не и за полета, които са предварително дефинирани.

Има ли някакъв начин това да се случи? Мога ли по някакъв начин динамично да се отърва от num? Или нещо друго?


person Fragsworth    schedule 13.01.2011    source източник
comment
Кога се обаждате на num, защото извън този клас той ще бъде недефиниран, тъй като е частен.   -  person John Giotta    schedule 13.01.2011


Отговори (2)


Ако е предварително дефиниран, защо не можете да използвате метод getter/setter и прокси достъп до private var по този начин?

private var _num:Number = 100;
//....
function get num () : Number { }
function set num (val : Number) : void { }
person John Giotta    schedule 13.01.2011
comment
Точно това се опитвам да избегна; Опитвам се да дефинирам моделни обекти, чиито свойства се търсят лениво + дистанционно при получаването им, тъй като данните не съществуват в класа при инстанциране. Това не е само един обект, потенциално са десетки; Писането на тези getters/setter да правят точно едно и също нещо за всяко свойство би било ужасна караница и изглежда наистина нечисто. - person Fragsworth; 13.01.2011

Няма начин Proxy да има достъп до частни предварително дефинирани свойства на клас. Или я направете публична, ако искате достъп до нея, или преименувайте променливата и след това отговорете на num повиквания:

public dynamic class TestProxy extends Proxy
{
    private var _num:Number = 100;

    public function TestProxy()
    {
        super();
    }

    override flash_proxy function getProperty(name:*):*
    {
        if (name == "num")
        {
            return _num;
        }
    }
}
person Richard Szalay    schedule 13.01.2011