ActionScript: Использование «in» для защищенных / приватных переменных? - PullRequest
1 голос
/ 08 апреля 2010

Можно ли имитировать оператор in, кроме проверки наличия полей protected или private?

Например, это:

<mx:Script><![CDATA[
    public var pub:Boolean = true;
    protected var prot:Boolean = true;
    private var priv:Boolean = true;
]]></mx:Script>

<mx:creationComplete><![CDATA[
    for each (var prop in ["pub", "prot", "priv", "bad"])
        trace(prop + ":", prop in this);
]]></mx:creationComplete>

Будет отслеживать:

pub: true
prot: false
priv: false
bad: false

Когда я хочу увидеть:

pub: true
prot: true
priv: true
bad: false

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

Вы можете просто попытаться получить к нему доступ и отловить возникающие ошибки. :)

in не знает ни о каких открытых пространствах имен (включая частные и защищенные в вашем случае) и будет искать только в общедоступном пространстве имен.

in для объектов на самом деле просто вызывает Object::hasOwnProperty. К сожалению, вы не можете переопределить этот метод, чтобы изменить его поведение. класс only , который может влиять на него, flash.utils::Proxy, который фактически использует flash_proxy::hasProperty для определения возвращаемого значения hasOwnproperty. Так что нет, кроме попыток, нет другого пути, к сожалению.

1 голос
/ 08 апреля 2010

Как насчет:

  <mx:creationComplete>
    for each (var prop:String in ["pub", "prot", "priv", "bad"])
    {
      try
      {
        t.text += prop + ":" + this[prop] + "\n";
      }
      catch (e:Error)
      {
        t.text += prop + ": false" + "\n";
      }
    }
  </mx:creationComplete>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...