2012-03-07 1 views
0

ActionScript 2.0の可変スコープに関する簡単な質問。今日いくつかのテストを行い、連結された変数文字列を使って関数のローカル変数をどのようにターゲットにするのか疑問に思っていました。例えばアクションスクリプト2はローカル変数をターゲットにしていますか?

var txt = "Hello World"; 

function testing(msg) { 
    var test1 = msg; 
    trace(this["test"+1]); 
} 

testing(txt); 

私は、トレースは、 "Hello World" のことを期待したいのではなく、 "未定義" 与えられています。したがって、関数の外部で作成された変数がメインタイムライン上に作成された場合、ローカル関数変数はどこに作成され、どのようにそれらにアクセスしますか?

答えて

1

関数内で宣言した変数は、thisオブジェクトに追加されません。

function testing(msg) { 
    var test1 = msg; 
    trace(test1); 
} 

あり、私が知っている他の方法ではありません(eval以外の、そしてあなたは、一般的にそれを避けたい)を使用して、ローカル変数の名前を参照するために:あなたは、変数名によってそれらを参照しますその名前を含む文字列

何らかの理由で名前を参照する必要がある場合は、別のコンテナ内に配置する必要があります。ローカルオブジェクトを定義し、これらの変数をメンバーにするか、この関数をクラス上のメソッドにしてクラス変数を使用します。

+0

返信Hermsありがとう。ローカル関数変数が "this"オブジェクトに追加されていないことを明確にしてくれてありがとう。もともと、宣言されたほとんどの変数は、宣言されたタイムラインに追加されると仮定していました。それらをオブジェクトに格納することを試してみる必要があります。 – lislis

1

私が覚えている限り、あなたはできません。 test1test2test3、...などがある場合は、testという配列にするのはなぜですか?そして、あなたはしかしtest1を使用しなければならない場合は、test[0]test[1]test[2]、....

だ、そして一つの方法は、オブジェクトにそれを置くことです。

var obj = {}; 
obj.test1 = msg; 

trace(obj["test" + 1]); 
+0

返事とマニッシュの例をありがとう。これらの変数を格納するためにオブジェクトを使用する必要があることを強調します。 – lislis

関連する問題