使用eval或set缩短AS 2.0中的内容?

时间:2010-12-24 03:19:29

标签: flash actionscript actionscript-2

eval("_parent.volumetone" + target1)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target2)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target3)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target4)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target5)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target6)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target7)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target8)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target9)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target10)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target11)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target12)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target13)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target14)._yscale = Math.round(number)/1.5+50;
eval("_parent.volumetone" + target15)._yscale = Math.round(number)/1.5+50;

我有这些重复代码。变量target1到target15是1到110之间的随机数。因此可以指向_parent.volumetone49并调整其_yscale。 上面的代码按我想要的方式工作,但我希望它更短。

这是我尝试过没有成功的事情:

for (i = 0; i < 15; i++) {
set("_parent.volumetone" + ("target"+i) + "._xscale", Math.round(funhousenumber)/1.5+50);
}

基本上有一个从1开始并转到15的循环,然后将target1替换为target + i,i为1,这将给出target1,从而得到其中包含的数字。

也许我必须使用eval()?我仍然不确定我在做什么但是我正在学习。感谢。

2 个答案:

答案 0 :(得分:1)

这应该做你想要的事情

for (i = 0; i <= 15; i++) {
    _parent["volumetone" + this["target" + i]]._yscale = Math.round(funhousenumber) / 1.5 + 50);
}

括号语法是一种使用限定名称访问对象属性的方法。它将设置或获取具有给定名称的属性的值,就像点语法一样,但不同之处在于点语法是编译时,括号语法是运行时。第一种在编写类型安全代码时通常更有用,而后者在编写动态代码时更有用。请考虑以下代码,它在功能上是等效的:

foo.bar = 1;
foo["bar"] = 1; // Functionally equivalent to the line above

在您的情况下,为了减少重复代码并仍然从目标*变量中获取值,您将在循环内部使用括号语法。这就是上面代码段中的以下内容:

this["target" + i]

你应该用属性所属的任何对象替换'this',除非它们实际上属于'this'。

答案 1 :(得分:0)

您可以使用括号语法:

for (i = 0; i < 15; i++) {   
 _parent["volumetone" + i]._xscale = Math.round(funhousenumber)/1.5+50);
}

可以使用点表示法或括号表示法引用对象的任何属性,因此您可以使用object [“name”]代替object.name。

我认为eval()和set()或多或少已被弃用,并且不建议使用它们。