ActionScript 3: неожиданное поведение массива при нажатии на элемент - PullRequest
0 голосов
/ 26 декабря 2010

Я немного смущен одним выражением:

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 ]

4 голосов
/ 26 декабря 2010

Вы устанавливаете аргумент , называемый 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 голос
/ 26 декабря 2010

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

this.id = id instead of id = id

Вам нужно неявно вызывать ваш объект var

1 голос
/ 26 декабря 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...