2012-11-05 142 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; 
     } 
    } 
}