在AS2中,如何连接变量名?

时间:2012-01-27 15:58:48

标签: flash loops actionscript-2

我正在尝试遍历我在Flash IDE中创建的一组textField,并通过属性面板命名它们,名称为“dot_text1,dot_text2等...”。这些textfield元素嵌套在另一个movieclip称为“花束”。

我的问题是我正在尝试遍历所有这些并将它们存储到一个数组中供以后使用,但是当我追踪它时,我一直都未定义。我在文件的根目录中编写脚本。

for (var i=0; i <11; i++) {
    trace(["bouquet.dot_text" + i]); 
}

我显然做错了什么:(。谢谢。

1 个答案:

答案 0 :(得分:3)

如果您希望将所有控件存储在数组中,请执行以下操作:

var inputs = new Array();
for (var i=0; i <11; i++) {
    inputs.push(bouquet["dot_text" + i]);
}

在你的例子中,你说:

trace(["bouquet.dot_text" + i])

实际上是在说什么

“打印出包含文本”bouquet.dot_text“+ i

的单元素数组的跟踪

当你想说的是

“在名为bouquet的对象中打印出名为”dot_text“+ 1的成员的跟踪。

所以你的例子应该读取这样的内容:

for (var i=0; i <11; i++) {
    trace(bouquet["dot_text" + i]); 
}

[编辑]

OP对使用“用于连接变量名称的括号”表示混淆。这里实际发生的是JavaScript系列语言的一个非常酷的功能:对象也是关联数组,因此当您声明这样的对象时:

var obj = {member: "value"};
// now, obj.member == "value"

您也可以像访问关联数组一样访问其成员变量:

obj["member"]

现在,由于您可以使用表示成员名称的字符串作为数组的键,显然您也可以连接到该字符串,因此:

var obj = {member1: "value1", member2: "value2"};
var value1 = obj["member" + 1];
var value2 = obj["member" + 2];

当然,这是你可以用循环变量或你有什么做的。

OP的原始示例中有什么问题是他们没有访问数组,他们正在创建

// this accesses the "member" key in the assoc. array "obj"
var value = obj["member"];
// this creates a new 1-element array containing the string "member"
var array = ["member"];

因此,括号与连接变量名称实际上没有任何关系;在一个上下文中,它们表示数组文字,在另一个上下文中,它们表示数组访问。希望这能澄清一点事情吗? : - )