2012-01-26 26 views
0

我發現自己對下面的知識缺乏瞭解。具有函數參數的AS3作用域

藉此類:

public class MyClass 
{ 
    public var width:int = 10; 
    public var height:int = 10; 

    public function MyClass(width:int, height:int) 
    { 
     trace(width, height); 
    } 
} 

輸出將總是爲寬度和高度所提供的值,而不是屬於MyClass的寬度和高度屬性。即使看起來應該有一個用於衝突的屬性名稱,也不會收到上述錯誤。

爲什麼/它是如何工作的?另外,我的構造函數上面定義的寬度和高度是否仍然可以在我的構造函數中訪問?

回答

3

它的工作原理是,因爲參數名稱爲「影子」字段變量名稱,即編譯器假定您的意思是那些。

您可以使用this.widththis.height訪問成員。這也是編譯器將所有隱式成員調用轉換爲字節碼的事實上的語法(如果沒有同名的局部變量,width會自動翻譯爲this.width)。

順便說一下,像FDT這樣的一些IDE允許您爲名稱遮蔽設置警告或錯誤消息。

1

編譯器會優先考慮本地作用域變量。

在你的情況下,如果你想要類成員變量,你將需要指定「this」。

參數(寬度和高度)完全是差異變量,然後是類成員。