2010-04-08 77 views
1

有什麼辦法來模仿in運營商,但測試protectedprivate字段的存在?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

酷 - 這很好,知道。謝謝。 – 2010-04-08 19:02:25

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 2010-04-08 18:38:54

+0

是的,這是我現在正在做的:'function hasProp(name){try {this [name];返回true; } catch(e:ReferenceError){/ *什麼都不做* /};返回false; }'...但它很蹩腳:( – 2010-04-08 19:03:21

+0

請提出功能請求:http://bugs.adobe.com – 2010-04-08 19:29:14