Переменная область действия Flash Action Script 3 не работает - PullRequest
0 голосов
/ 22 сентября 2009

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

package a {
  public class a {
    public var a_var:String;
    public var x_var:String;
    public function a() {
      var a_var = 'My name';
      var x_var = 'X string';
    }
    public function show_a():String {
      return a_var;
    }       
  }

  public class b {
    public function b() {
      var a_obj:a = new a();
      trace('trace' + a_obj.a_var); //is this wrong?
      trace(a_obj.show_a()); //is this possible? if so, what would be the output?
    }
  }  
}

При попытке передать a_var из класса a в класс b, a_obj.a_var возвращает нулевое значение.

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 22 сентября 2009

В вашем классе конструктор заменит:

public function a() {
    var a_var = 'My name';
    var x_var = 'X string'
}

с:

public function a() {
    this.a_var = 'My name';
    this.x_var = 'X string'
}

Ключевое слово var создает локальную переменную в конструкторе, чтобы переменная собирала мусор после выхода потока из конструктора.
Используя this, вы присваиваете значение переменной экземпляра, что вам и нужно в этом случае.

0 голосов
/ 22 сентября 2009

Вы не можете иметь более одного класса внутри объявления package{}. Либо разделите их на два файла, либо возьмите один класс из package{} и удалите его public модификатор доступа.

//A.as
package a
{
  public class A
  {
    //constructor and stuff
  }
}
class B
{
  //class B goes here
}

или

//A.as
package a
{
  public class A
  {
    //constructor and other stuff
  }
}
//B.as
package a
{
  public class B
  {
    //constructor and other stuff
  }
}

И да, как указал Спендер, вы должны удалить объявление var из конструктора.

0 голосов
/ 22 сентября 2009

Это потому, что в конструкторе a вы не присваиваете полям класса a_var и x_var. Вы объявляете переменные с одинаковыми именами, которые имеют локальную область видимости и выпадают из области видимости в конце блока конструктора. Попробуйте удалить переменную из начала этих двух строк:

var a_var = 'My name';
var  x_var = 'X string'

... и все будет хорошо.

...