2010-12-26 2 views
0

Я немного запутался одним выражением: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 
    } 
} 

Как это можно объяснить?

+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

Простой, но очень и очень трудно определить, когда вы находитесь в середине этого: Конструктор в классе узла должен выглядеть следующим образом, вместо:

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

Когда вы опустили «это» временный Идентификатор переменной присваивается самому себе, поэтому на выходе «0».

1

Мое первое предположение:

this.id = id instead of id = id 

Вы не знаете, ed для вызова вашего объекта var неявно

Смежные вопросы