我对一个表达式感到有点困惑:
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
}
}
如何解释这个?
答案 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