Apache flex ActionScript 3:推送元素时数组的意外行为
有一句话让我有点困惑:Apache flex ActionScript 3:推送元素时数组的意外行为,apache-flex,actionscript-3,Apache 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); 这是怎么解释的?简单,但是当你在中间时很难发现:你的节点类中的构造函数需要这样来代替: public function Node(id:int) {
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);
这是怎么解释的?
简单,但是当你在中间时很难发现:你的节点类中的构造函数需要这样来代替:public function Node(id:int)
{
this.id = id
}
当你省略了这个“临时变量ID”时,输出中的“0”,
简单,但是当你在中间时非常难发现:你的节点类中的构造函数需要看起来像这样:public function Node(id:int)
{
this.id = id
}
当您省略“this”时,临时变量id会被分配给它自己,因此输出中会出现“0”。您正在将名为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
}
您正在将名为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
}
我的第一个猜测是:
this.id = id instead of id = id
您需要隐式调用对象变量我的第一个猜测:
this.id = id instead of id = id
您需要隐式调用对象变量所有给出的答案都是绝对正确的,这是一个非常常见的错误。我一直这么做,真的应该有一个编译器警告它。所有给出的答案都是绝对正确的,这是一个非常常见的错误。我一直这么做,真的应该有一个编译器警告它。