动态变量名称

时间:2012-04-18 01:33:28

标签: actionscript-3 variables dynamic

我需要创建一个变量:

var numDots0:Number=0;

但是,当点击按钮时,变量numDots0变为numDots1,然后在第二次点击时变为numDots2,依此类推。然后我需要能够获取新的变量名并在函数中使用它。

3 个答案:

答案 0 :(得分:2)

这是一个非常非常奇怪的请求,但无论如何:

您可以使用Object的键名来存储属性,然后更改:

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.

我认为这绝对没有任何好处或需要,所以我强烈建议你看看你正在尝试做什么,并确保它有意义并且没有不同的应用程序。

答案 1 :(得分:0)

我很确定你对你想要解决的问题采取了错误的方法。动态变量名称不是您在最佳实践手册中阅读的内容。

无论如何要在AS2中回答你的问题,你可以使用命令eval将字符串评估为ActionScript,所以你会使用类似的东西:

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);
}

答案 2 :(得分:0)

答案是执行您要执行的操作并改为使用数组,散列或向量。给我们更多的上下文,或者你想要达到你想要的目的的原因以及为什么你可能认为你需要一个像这样的动态变量名。你不应该在运行时使用evals或任何改变变量名称的东西,因为编程之神会让你失望。也就是说,你的程序将要破解,当它发生时,它肯定会更难调试。

如果你确定这是你想要做的,那我就错了,哈哈。祝你好运!