2009-09-22 82 views
0

我想將某些變量從一個類傳遞到另一個類,但下面的代碼不起作用。Flash動作腳本3變量作用域不起作用

package a { 
    public class a { 
    public var a_var:String; 
    public var x_var:String; 
    public function a() { 
     var a_var = 'My name'; 
     var x_var = 'X string'; 
    } 
    public function show_a():String { 
     return a_var; 
    }  
    } 

    public class b { 
    public function b() { 
     var a_obj:a = new a(); 
     trace('trace' + a_obj.a_var); //is this wrong? 
     trace(a_obj.show_a()); //is this possible? if so, what would be the output? 
    } 
    } 
} 

當我嘗試通過從aa_varb類,a_obj.a_var返回空值。

我怎樣才能做到這一點?

回答

1

在你的類的構造函數替換:

public function a() { 
    var a_var = 'My name'; 
    var x_var = 'X string' 
} 

有:

public function a() { 
    this.a_var = 'My name'; 
    this.x_var = 'X string' 
} 

關鍵字var創建在構造器的局部變量,這樣人流後collecteded變量被垃圾失控構造器的。
通過使用this您賦值的實例變量,這是你想要的情況下。

0

這是因爲在a的構造函數中,您沒有分配給類字段a_var和x_var。您正在聲明具有局部作用域且在構造函數塊結尾處超出範圍的縮進命名變量。嘗試從這兩行的開頭刪除var:

var a_var = 'My name'; 
var x_var = 'X string' 

...並且所有都會很好。

0

package{}聲明中不能有多於一次的類。將它們分成兩個文件或從package{}中取出一個類並刪除它的public訪問修飾符。

//A.as 
package a 
{ 
    public class A 
    { 
    //constructor and stuff 
    } 
} 
class B 
{ 
    //class B goes here 
} 

//A.as 
package a 
{ 
    public class A 
    { 
    //constructor and other stuff 
    } 
} 
//B.as 
package a 
{ 
    public class B 
    { 
    //constructor and other stuff 
    } 
} 

,是的,因爲富豪指出,u必須刪除構造函數的var聲明。

+0

是它在單獨的文件中,我只是把它用於演示.. – coderex 2009-09-22 11:08:55