2010-04-08 3 views
1

Есть ли способ имитировать оператор in, но тестирование на наличие protected или private полей?ActionScript: Использование 'in' для защищенных/закрытых переменных?

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

<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

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

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

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

+0

Прохладный - это полезно знать. –

1

Как насчет:

<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> 
+0

Поскольку у вас есть необходимые подключения, не могли бы вы попросить изменить это поведение? :) потому что это действительно очень грустно. – back2dos

+0

Да, это то, что я делаю сейчас: 'function hasProp (name) {try {this [name]; return true; } catch (e: ReferenceError) {/ * ничего не делать * /}; return false; } '... Но это довольно хромой :( –

+0

Просьба подать запрос на функцию: http://bugs.adobe.com –

Смежные вопросы