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

У меня есть класс, который расширяет класс Proxy и имеет статически определенную переменную-член с именем 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
Это именно то, чего я пытаюсь избежать; Я пытаюсь определить объекты модели, свойства которых просматриваются лениво + удаленно при их получении, поскольку данные не существуют в классе при создании экземпляра. Это не один объект, а потенциально десятки; написание этих геттеров/сеттеров для выполнения одного и того же для каждого свойства было бы ужасно хлопотным и выглядело бы действительно нечистым. - 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