2010-04-08 4 views
1

Existe-t-il un moyen d'imiter l'opérateur in, mais de tester l'existence de champs protected ou private?ActionScript: Utiliser 'in' sur des variables protégées/privées?

Par exemple, ceci:

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

tracera:

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

Quand je veux voir:

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

Répondre

2

vous pouvez simplement essayer d'y accéder et d'attraper les erreurs qui en résultent. :)

in ignore les espaces de noms actuellement ouverts (y compris privés et protégés dans votre cas), et ne regarde que dans l'espace de noms public. Pour les objets, il suffit d'appeler Object::hasOwnProperty. Malheureusement, vous ne pouvez pas remplacer cette méthode pour modifier son comportement. la seule classe qui peut l'influencer est flash.utils::Proxy, qui utilise effectivement flash_proxy::hasProperty pour déterminer la valeur de retour de hasOwnproperty. Donc non, à part essayer, il n'y a pas d'autre moyen malheureusement.

+0

Cool - c'est bon à savoir. –

1

Que diriez-vous:

<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

étant donné que vous avez les connexions requises, pourriez-vous demander à changer ce comportement? :) parce que c'est vraiment très triste. – back2dos

+0

Oui, c'est ce que je fais maintenant: 'function hasProp (name) {try {this [nom]; retourner vrai; } catch (e: ReferenceError) {/ * ne fait rien * /}; return false; } '... Mais il est assez boiteux :( –

+0

S'il vous plaît déposer une demande de fonctionnalité: http://bugs.adobe.com –

Questions connexes