2010-04-10 121 views
2

我很難找出AS 3.0中的參考系統。AS 3.0參考問題

這是代碼,我有

package rpflash.ui { 

import flash.display.Sprite; 
import flash.display.MovieClip; 
import flash.display.Stage; 
import nowplaying; 
import flash.text.TextField; 

public class RPUserInterface extends Sprite{ 

    var np:nowplaying; 

    public function RPUserInterface(){ 
     } 

    public function init(){ 
     var np:nowplaying = new nowplaying(); 
     this.addChild(np) 
     } 

    public function updateplayer(xml:XML){ 
     var artist: String = xml.nowplaying.artist.toString(); 
     var title: String = xml.nowplaying.title.toString(); 
     trace("UI:update"); 
     trace(this.np);// this gives me a null reference 
     } 
} 
} 

(我爲了找到問題,但無濟於事修剪下來),仍然我無法訪問NP!跟蹤this.np給我一個空引用。我甚至不試圖從一個subling類訪問它。 (順便說一句,我想知道如何做到這一點。)

回答

3

在你的init()函數,你正在實例化一個局部變量,稱爲np。試試這個:

public function init() { 
    // var np:nowplaying = new nowplaying(); 
    np = new nowplaying(); 
    this.addChild(np); 
} 

此外,確保init()是越來越updateplayer()之前調用。希望有所幫助。

+1

要進一步擴展,「var」關鍵字總是在當前作用域中創建一個新變量。在你發佈的代碼中,你使用「var」來聲明你的變量兩次 - 第一次,你聲明它在任何函數之外,這是聲明一個類屬性的正確方法。第二次,當你在函數內再次聲明它時,你正在創建一個新的變量,該變量的作用域在該函數內。以後嘗試引用該變量不起作用,因爲它們引用了未初始化的類屬性。 – fenomas 2010-04-10 16:36:36