2011-05-23 90 views
1

我創建ActionScript中的按鈕衝突的延長flash.display.SimpleButton與類屬性

按鈕並不像預期的那樣,但是,當我宣佈在構造函數中某些變量,也恰好存在於SimpleButton類中的屬性。他們似乎衝突..

這是爲什麼?不應該允許本地聲明的變量與類似命名的類特性共存嗎?

摘錄如下可能會更好地說明這個問題:

public class MyButton extends SimpleButton{ 

    public function MyButton(/*..*/){ 

     var upState:ButtonDisplayState = new ButtonDisplayState(/*..*/)); 
     var downState:ButtonDisplayState = new ButtonDisplayState(/*..*/);  
     var overState:ButtonDisplayState = new ButtonDisplayState(/*..*/);  
     var hitTestState:ButtonDisplayState = new ButtonDisplayState(/*..*/);  

     super(upState, overState, downState, hitTestState); 

    } 

} 

的API文檔是在這裏(尋找北部爲例):http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/SimpleButton.html#upState

感謝,

奧德赫。

+0

只是爲了澄清,重命名變量例如上下,擊中等作品,但我很好奇爲什麼發生這種情況? – Aodh 2011-05-23 12:32:06

回答

1

您不能重新聲明已存在的變量,本地或不是。你可以做這樣的事情的唯一方法是方法參數,你可以在這裏有與本地/類變量相同的參數名稱。

你爲什麼不只是這些國家傳遞給構造函數直接,如:

super(new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/))); 

或可替代只是將它們直接調用​​這樣後:

upState = new ButtonDisplayState(/*..*/)); 
downState = new ButtonDisplayState(/*..*/);  
overState = new ButtonDisplayState(/*..*/);  
hitTestState = new ButtonDisplayState(/*..*/); 
+0

好吧我只是做了一個測試,我在構造函數中重新聲明瞭一個類變量,並且當我追蹤該值時,我得到了預期的結果,即本地重新聲明的變量對類聲明變量沒有任何影響。我也做了一個相同結果的屬性測試。 – Aodh 2011-05-23 13:09:27

+0

你把它們放在* super();後面嗎? – dain 2011-05-23 13:23:11

+0

我寫了一個快速測試用例,並在調用super之前和之後都設置了變量。在這兩種情況下,超級變量和子類變量都不會相互干擾? – Aodh 2011-05-23 14:11:12