ActionScript 3:推送元素时数组的意外行为

时间:2010-12-26 19:11:15

标签: flex actionscript-3

我对一个表达式感到有点困惑:

var nodes:Array = new Array();
for (var i:int = 0; i<=3; i++)
{
   var node:Node = new Node(i)
   nodes.push(node);
}
trace(nodes[0].id + ":" + nodes[1].id);

按我的预期退回给我0:0而不是0:1

public class Node
{
   public var id:int;
   public function Node(id:int)
   {
      id = id
   }
}

如何解释这个?

3 个答案:

答案 0 :(得分:4)

您正在设置名为id参数等于它自己,这显然不是预期的行为。

当存在与参数具有相同名称的实例变量时,您需要明确要设置的变量:

public function Node(id:int) {
   this.id = id;
}

这也可行:

public function Node(an_id:int) {
   id = an_id; //here it implicitly assigns the instance variable
}

答案 1 :(得分:1)

简单但很难在你处于中间位置时发现:节点类中的构造函数需要看起来像这样:

public function Node(id:int)
{
    this.id = id
}

当省略“this”时,临时变量id被赋值给它自己,因此输出中的'0'。

答案 2 :(得分:1)

我的第一个猜测:

this.id = id instead of id = id

您需要隐式调用对象var