0

変数を作成する必要があります:

var numDots0:Number=0;

しかし、ボタンがクリックされると、変数は にnumDots0なりnumDots1numDots22 回目のクリックで、というように続きます。次に、その新しい変数名を取得して関数で使用できるようにする必要があります。

4

3 に答える 3

2

それは本当に、本当に奇妙な要求ですが、とにかく:

オブジェクトのキー名を使用してプロパティを保存し、それを変更できます。

var obj:Object = { numDots0: 0 };

そして、名前を変更したい場合:

delete obj.numDots0;
obj.numDots1 = 1;

または、簡単にインクリメントするには、これを使用できます。

var i:int = 0;
function increase():void
{
    delete obj["numDots" + i];
    obj["numDots" + (++i)] = i;
}

アクセスするために:

trace(obj.numDotsX); // where X is the most recent variable name.

これにはまったくメリットも必要性もないと思いますので、何をしようとしているのかを見て、それが理にかなっており、別のアプリケーションがないことを確認することを強くお勧めします.

于 2012-04-18T02:10:05.217 に答える
0

解決しようとしている問題について、間違った方向に進んでいると確信しています。動的変数名は、ベスト プラクティスの本で読むものではありません。

とにかく、AS2 で質問に答えるには、文字列を ActionScript として評価するコマンド eval を使用できます。したがって、次のようなものを使用します。

function onClicked(e:MouseEvent):void
{
     counter++;
     eval("var numDots" + counter +"+:Number=0;");
}

AS3 では、そのコマンドは削除されました (あなたがやろうとしているような悪いコーディング プラクティスにつながるため)、それにもかかわらず、誰かが AS3 にエバリュエーターを実装しました:

http://eval.hurlant.com/

このエバリュエーターを使用して、ライブラリをプロジェクトに追加し、上記のスニペットに次を追加します。

function eval(expression:String):void
{
    var evaluator:com.hurlant.eval.Evaluator = new com.hurlant.eval.Evaluator();
    var bytes:ByteArray = evaluator.eval(expression);
    bytes = ByteLoader.wrapInSWF([bytes]);

    var context:LoaderContext = null
    var loader:Loader = new Loader();

    loader.loadBytes(bytes, context);
}
于 2012-04-18T02:11:50.677 に答える
0

答えは、しようとしていることを実行せず、代わりに配列、ハッシュ、またはベクトルを使用することです。もう少しコンテキストを教えてください。または、あなたがやりたいことを正確に達成したい理由と、そのような動的変数名が必要だと思う理由を教えてください。実行時に変数名を変更する evals などを使用するべきではありません。つまり、プログラムが壊れる可能性があり、壊れると確実にデバッグするのが難しくなります。

これがあなたがやりたいことだと確信しているなら、私は間違っています、ハハ。幸運を!

于 2012-04-19T05:30:32.003 に答える