2011-08-04 50 views
3

在flex中,如何檢查變量是否存在?我一直在使用如何檢查變量是否存在flex

if (this['some_variable'] != undefined) { 
    //do something 
} 

有一個運行時錯誤說some_variable不存在財產嘗試。我已經用null而不是undefined進行了檢查,仍然是一樣的錯誤。

請大家幫忙。

[編輯]

基於我已經使用this.hasOwnProperty('variable_name')的答覆。我發現它的返回true如果variable_namepublic但是false如果它的private/protected。如何檢查一個私有變量?

+0

設置斷點和檢查變量視圖 - 假設你使用Flash Builder。 – TheDarkIn1978

+1

hasOwnProperty()僅適用於公開的那些字段。在AS3中沒有任何事情可以通過執行觀察來揭示私人成員。如果這對你來說絕對是一個需求,那麼切換到AS2,所有東西都是公開的。 –

回答

6

您可以使用

if (this. hasOwnProperty("some_variable")) { 
    //access the variable inside 
} 
2

if (this.hasOwnProperty('some_variable')) DO_IT_!()

說明:

this['some_variable']嘗試計算實例屬性some_variable的價值。如果沒有這樣的財產,你會得到這個錯誤。

要測試特定對象是否存在屬性,請使用hasOwnProperty或將您的條件包裝在try/catch塊中或使用if ('some_variable' in this)

通常你在類文件中創建一個對象屬性:

public class MyClass { 
    public var myProperty : String = "ich bin hier"; 
} 

然後,你指的是屬性的類內:

trace (myProperty); 
trace (this.myProperty); 

使用數組語法[]也是可能的,但將如果屬性未定義,則拋出錯誤。

trace (this['myProperty']); 

最後!如果您聲明您的類是動態的,即使該屬性不存在,也可以使用數組語法。

public dynamic class MyClass { 
    public function MyClass() { 
     trace (this["never_declared_property"]); 
    } 
} 
8

有針對兩種方式:

if ("some_variable" in this) { 
    //do something 
} 

它使用in operator

和:

if (this.hasOwnProperty("some_variable")) { 
    //do something 
} 

documentation about hasOwnProperty()

如何獲取有關私有/受保護屬性的信息情況是,您無法使用Flash Player的當前狀態獲取此信息。我想唯一可能的方式是某種類型的運行時字節碼操作。但據我所知,目前還沒有人實施它。

但我有一個關於獲取有關私有/受保護屬性的信息的問題:您需要它的目的是什麼?這些屬性/方法的本質是你不能給它們打電話。即使你知道他們的存在。

+0

我已更新我的問題。你能幫忙嗎 – Anji

+0

@安吉我已經更新了我的答案。 – Constantiner

+0

只有'if(「ClassName中的some_variable」)'與靜態字段一起工作。 –

相關問題