Actionscript 3 动态变量名
我需要创建一个变量:Actionscript 3 动态变量名,actionscript-3,variables,dynamic,Actionscript 3,Variables,Dynamic,我需要创建一个变量: var numDots0:Number=0; 但当单击按钮时,变量numDots0变为numDots1,然后再次单击numDots2,依此类推。然后我需要能够获取新的变量名并在函数中使用它。这是一个非常非常奇怪的请求,但无论如何: 可以使用对象的键名来存储属性,然后更改: var obj:Object = { numDots0: 0 }; 然后,当您要更改名称时: delete obj.numDots0; obj.numDots1 = 1; 或者,为了轻松增加,您可以
var numDots0:Number=0;
但当单击按钮时,变量
numDots0
变为numDots1
,然后再次单击numDots2
,依此类推。然后我需要能够获取新的变量名并在函数中使用它。这是一个非常非常奇怪的请求,但无论如何:
可以使用对象的键名来存储属性,然后更改:
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.
我认为这绝对没有好处或必要,因此我强烈建议您看看您正在尝试做什么,并确保它是有意义的,并且没有不同的应用程序。我非常肯定您在试图解决的问题上走错了方向。动态变量名不是您在最佳实践手册中读到的内容 无论如何,要回答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);
}
答案是不要做你想做的事情,而是使用数组、散列或向量。请给我们提供更多的上下文,或者您想要实现的目的的原因,以及您可能认为需要这样一个动态变量名的原因。您不应该在运行时使用evals或任何更改变量名的东西,因为编程之神会将您击倒在原地。i、 例如,您的程序将要崩溃,当它崩溃时,调试肯定会更加困难
如果你确定这就是你想做的,那么我错了,哈哈。祝你好运 我真的怀疑这是你真正需要的。更改名称的变量不会导致可读代码。你想完成什么?是的,请,背景会帮助你得到更好的建议。我相信你认为我的动作脚本不是最强的,但我会尽力更好地解释我想做什么,并发布我的代码。我有一个应用程序,允许您通过在网格上放置点并连接点来绘制形状,我想要的是将一个按钮调整到现有代码中,以允许创建新形状。@ejn有一些方法可以访问动态创建的实例,而无需将它们分配给变量,例如,您可以将它们添加到数组中,也可以从显示树中获取它们