2010-02-04 20 views
0

出於好奇,我決定用一個Flex 4項目如下實驗:我期望什麼ActionScript 3的構造函數範圍問題

public class MyGroup extends Group 
{  
    public function MyGroup() 
    { 
     super(); 
     var myLabel:Label = new Label(); 
     myLabel.id = "myLabel"; 
     myLabel.text = "My label!"; 
     this.addElement(myLabel); 
    } etc. 

這種定製組件相同;它看起來像是一個帶有text =「My label!」的標籤控件。

問:有沒有辦法在項目的其他地方引用myLabel標籤控件(例如更改文本)?

目前,我可以通過調用類似myGroup.getElementAt(0)的方法來獲得內部標籤控件。

我意識到將標籤作爲類變量會更有意義 - 我只是想知道這段代碼是如何工作的。

回答

2

可以作出公開二傳手改變你的文本標籤:

public class MyGroup extends Group 
{ 
    private var _label:Label=new Label(); 

    public function set label(value:String):void{ 
     _label.text=value; 
    } 

    public function MyGroup() 
    { 
     super(); 
     _label.id = "myLabel"; 
     label = "My label!"; 
     addElement(_label); 
    } 
..... 
} 

var myGroup:MyGroup=.. 
myGroup.label="Hello"; 

在你的情況,因爲你可以聲明你varmyLabel一個function裏面,它的範圍將只在這裏面function

0
申請

在ActionScript中,變量是可以用來獲取對象和數據的命名句柄。變量有一些名爲的作用域,它指定了句柄的哪些部分是有效的。

當你在一個函數中創建一個變量時,它的作用域就是那個函數。也就是說,該特定的命名句柄只能在該函數內使用。

在您的代碼中,創建一個名爲myLabel的句柄,並在其中放入一個Label - 我們稱之爲Label123。接下來,您將Label123放入MyGroup的元素列表中,該元素列表給出MyGroup附加到Label123的句柄。然後該功能結束,名爲myLabel的句柄不再可用。 Label123仍然存在,因爲MyGroup有處理它。

如果您創建myLabel作爲privateprotected類變量,該句柄將可用於MyGroup中的任何函數。如果將它創建爲public類變量,則它將在MyGroup內的任何地方使用,並且還可以在代碼中的任何地方使用MyGroup的實例。 (如果您創建爲internal類變量,這將是可用的任何地方包MyGroup在裏面。)