2012-11-05 150 views
1

我正在尝试使用getter,但在将代码烧到最简单的事情后,我可以想到我仍然以相同的错误结束。下面是错误1119错误1119和1120

主要代码:

package 
{ 
    import flash.display.MovieClip; 

    public class Main extends MovieClip 
    { 
     public function Main() 
     { 
      init(); 
     } 
     public function init():void 
     { 
      if (Player.value == 23) 
      { 
       trace("if statment") 
      } 
      trace(Player.value); 
     } 
    } 
} 

球员:

package 
{ 
    public class Player 
    { 
     private var _numberOfKeys:uint; 

     public function Player() 
     { 
      _numberOfKeys = 23; 
     } 
     public function get value():uint 
     { 
      return _numberOfKeys; 
     } 
    } 
} 

,我得到的错误在两条线上试图用get函数,如果我改变玩家获得值函数为“公共静态函数”它读取_numberOfKeys的值,并说它是未定义的,但如果我硬编码一个数字它将它传递到Main类没有问题。

回答

0

为了了解这个问题,你需要理解上的差异是补间一个类和一个类的实例。 可以从类本身访问静态函数,只有在启动对象后才能访问这些非静态函数。

要解决你需要写类似第一种情况:

package 
{ 
    import flash.display.MovieClip; 

    public class Main extends MovieClip 
    { 
     public function Main() 
     { 
      init(); 
     } 
     public function init():void 
     { 
      var instance:Player = new Player(); 
      if (instance.value == 23) 
      { 
       trace("if statment") 
      } 
      trace(Player.value); 
     } 
    } 
} 

为什么你的错误的原因你当你改变值函数静态是因为_numberOfKeys不是静态的。

+0

谢谢你,我一直在为此奋战几天,找不到一个简单的解释。只是为了在我的脑海中清楚。如果我使用addChild()将电影剪辑放置在舞台上,那么无论我们为该电影剪辑添加的变量是否也会包含它们绑定的类?如果我只是使用一个单独的类来保存变量,那么我需要在Main类中创建一个变量来访问其他类。 – James

0

如果你想你的Main类包含的Player一个实例,然后实例从主要的init()球员:

package 
{ 
    import flash.display.MovieClip; 

    public class Main extends MovieClip 
    { 
     public var player:Player; 

     public function Main() 
     { 
      init(); 
     } 
     public function init():void 
     { 
      player = new Player(); 
      trace(player.value); 
     } 
    } 
} 

否则,如果你打算让玩家value属性是静态的,那么它必须能够引用_numberOfKeys静态初始化,如:

package 
{ 
    public class Player 
    { 
     private static var _numberOfKeys:uint = 23; 

     public static function get value():uint 
     { 
      return _numberOfKeys; 
     } 
    } 
}