2009-09-22 5 views
0

あるクラスから別のクラスにいくつかの変数を渡したいが、以下のコードは動作していない。Flash Action Script 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? 
    } 
    } 
} 

私はnull値を返しa_obj.a_var、クラスbにクラスaから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' 
} 

流れた後collecteded変数のgetゴミはコンストラクタから抜けるようにキーワードvarは、コンストラクタ内のローカル変数を作成します。
thisを使用すると、その場合に必要なインスタンス変数に値を割り当てます。

0

これは、aのコンストラクタで、クラスフィールドa_varとx_varに割り当てられていないためです。ローカルスコープを持ち、スコープの外にあるコンストラクタブロックの末尾にあるインデントのない変数を宣言しています。これらの2行の開始からvarを削除してみてください:

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

...すべてがうまくいくでしょう。

0

package{}宣言内に複数のクラスを持つことはできません。 2つのファイルに分割するか、package{}から1つのクラスを取り出し、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

はい私はそれをsepareteファイルに入れました。 – coderex

関連する問題