我需要创建一个变量:
var numDots0:Number=0;
但是当单击按钮时,变量numDots0
变为numDots1
,然后numDots2
在第二次单击时,依此类推。然后我需要能够获取该新变量名并在函数中使用它。
我需要创建一个变量:
var numDots0:Number=0;
但是当单击按钮时,变量numDots0
变为numDots1
,然后numDots2
在第二次单击时,依此类推。然后我需要能够获取该新变量名并在函数中使用它。
这是一个非常非常奇怪的要求,但无论如何:
您可以使用 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.
我认为这绝对没有任何好处或需要,因此我强烈建议您查看您正在尝试做的事情并确保它有意义并且没有不同的应用程序。
答案是不要做你想做的事情,而是使用数组、散列或向量。给我们更多的背景信息,或者你想要达到你想要的目的的原因,以及为什么你可能认为你需要一个这样的动态变量名。你不应该使用 eval 或任何在运行时更改变量名的东西,因为编程之神会让你失望。即,您的程序将要中断,当它发生时,肯定会更难调试。
如果你确定这是你想要做的,那我错了,哈哈。祝你好运!
我很确定您在尝试解决的问题上走错了路。动态变量名称不是您在最佳实践书中阅读的内容。
无论如何,要在 AS2 中回答您的问题,您可以使用命令 eval 将字符串评估为 ActionScript,因此您可以使用以下内容:
function onClicked(e:MouseEvent):void
{
counter++;
eval("var numDots" + counter +"+:Number=0;");
}
在 AS3 中,该命令已被删除(因为它会导致错误的编码实践- 就像您正在尝试做的事情一样),但是有人在 AS3 中实现了一个评估器:
使用此评估器将库添加到您的项目中,并将以下内容添加到上面的代码段中:
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);
}