如何从当前类中的其他类调用方法。 AS3

时间:2010-11-04 16:00:10

标签: actionscript-3 methods flash-cs4

我有一个类,我的文档类,名为SilkRoadTweeter.as 我还有一个名为User.as的类 在我的User类中,我需要调用一个名为nonce()的方法 我试过这个,

trace(SilkRoadTweeter(root).nonce());

但是我收到了错误,

TypeError: Error #1009: Cannot access a property or method of a null object reference.

4 个答案:

答案 0 :(得分:1)

修改

我实际上忘记了最重要的一个,你可以发送事件!

     //In the Document class
     var user:User = new User();
     user.addEventListener( "nonce" , nonceEventListener );

     //define your listener
     private function nonceEventListener(event:Event):void
     {
        user.result = this.nonce();
     }

     //In the User class
     public function result(value:Number):void
     {
        //here you deal the generated Number
      }

      //somewhere in the Class
     this.dispatch( new Event("nonce") );

编辑结束

您应该在User类

中传递SilkRoadTweeter的实例

例如:

    //In the Document class
    var user:User = new User( this );

    //In the User class
    var srt:SilkRoadTweeter;

    public function User( srt:SilkRoadTweeter )
    { 
       this.srt = srt;
       srt.nonce();
    }

如果将User类实例添加为SilkRoadTweeter类的子类,您也可以 这样做

    //In the User class
    var srt:SilkRoadTweeter;

    public function User()
    { 
        addEventListener(Event.ADDED , addedListener );
    }

    protected function addedListener(event:Event ):void
    {
         srt = this.parent as SilkRoadTweeter;
         srt.nonce();
    }

答案 1 :(得分:1)

你说nonce()函数在SilkRoadTweeter类中,你需要从User类中调用它。您必须具有对SilkRoadTweeter的引用才能调用其上的函数。错误是说它不知道SilkRoadTweeter是什么。在我看来,使用root来获取引用是混乱的,应该避免。我建议在创建User类时传递对它的引用。如果这不是一个选项,只要函数不需要访问SilkRoadTweeter的非静态属性,将SilkRoadTweeter类上的函数nonce()设置为static将解决您的问题。你说它只是返回一个生成的数字,所以我猜它不需要访问非静态属性。如果你仍然困惑,我可以进一步阐述我所说的话。

答案 2 :(得分:0)

在这种情况下,“ root ”可能为null。 尝试调试它来检查。

答案 3 :(得分:0)

尝试:

trace(root is SilkRoadTweeter)

我觉得你需要这样做:

trace((root.getChildAt(0) as SilkRoadTweeter).nonce());