Flash Action Script 3变量范围不起作用

时间:2009-09-22 10:34:20

标签: flash actionscript-3 scope flash-cs3

我想将一些变量从一个类传递到另一个类,但下面的代码不起作用。

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 个答案:

答案 0 :(得分:1)

在你的班级中,构造函数替换:

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在构造函数中创建局部变量,以便在流离开构造函数之后收集变量get garbagec。 通过使用this,您可以为实例变量赋值,这就是您想要的那种情况。

答案 1 :(得分:0)

这是因为在a的构造函数中,您没有分配给类字段a_var和x_var。您正在声明具有局部作用域且在构造函数块末尾超出作用域的缩进命名变量。尝试从这两行的开头删除var:

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

......一切都会好的。

答案 2 :(得分:0)

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声明。