2010-04-10 51 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