0

少し問題ありますが、

つまり、3 つの MovieClip が作成されました。

各MCリンケージA1、A2、A3に与えました。

ステージにコードを配置しました:

var a1:A1 = new A1();
var a2:A2 = new A2();

addChild(a1);
a1.addChild(a2);

A2で私は書いた:

var a3:A3 = new A3();
addChild(a3);
trace(a3.t);

そしてA3に私は置いた:

var t:String = "test";

トレースが「null」を返すのはなぜですか?

4

1 に答える 1

2

クラスファイルがどのように見えるか、または値を宣言して t に割り当てる行を正確にどこに置くかを知らなければ、確かなことは言えません。

A3 クラスのプロパティですか?

そのクラスのプロパティ宣言にそれがあることを意味します:

public var t:String = "test";

そうでない場合は、宣言した場所の外に t のスコープがないため、スコープの問題に対処しています。

たとえば、コンストラクターに次の行がある場合:

var t:String = "test";

そのスコープはコンストラクターに限定されます。

あなたがする必要があるのは、A3 クラスのパブリック プロパティを作成することです。

これは例です:

package
{
     public class A3 extends MovieClip
     {
         // declare as class property
         public var t:String;

         public function A3()
         {
              // assign value to class property t
              t = "Test";
         }

         public function doSomething():void
         {
              // this local variable is not accessible outside this function
              var someVariable:String = "test";
         }


     }
}

コメンターが指摘したように、プロパティをパブリック/プライベートとして宣言しないことを選択した場合、デフォルトでプライベートになるため、クラスの外では表示されません。メソッド内で変数を public/private として宣言することはできません。メソッド内で宣言された変数はすべて、そのメソッド (ローカル変数) にスコープされ、そのメソッド内でのみアクセスできます。

于 2012-12-19T22:30:47.740 に答える