as3两种函数声明方式的区别

时间:2013-09-18 13:44:51

标签: actionscript-3 flash

在AS3中使用P2P客户端时,我偶然发现了一些我想完全理解的内容。

虽然这有效:

private function test():void
{
    _sendStream = new NetStream(_nc, NetStream.DIRECT_CONNECTIONS);
    var c:Object = new Object;
    c.onPeerConnect = function(subscriber:NetStream):Boolean 
    {
        trace("onPeerConnect");
        return true;
    }
    _sendStream.client = c;
    ...
}

这不起作用:

private function test():void
{
    _sendStream = new NetStream(_nc, NetStream.DIRECT_CONNECTIONS);
    _sendStream.client = this;
    ...
}

public function onPeerConnect(subscriber:NetStream):Boolean 
{
    trace("onPeerConnect");
    return true;
}

没有详细讨论手头的特定问题(onPeerConnect只是在某个时刻调用NetStream对象的客户端对象上的回调函数),两种函数声明方式之间究竟有什么区别?是一种方式有效的原​​因,而另一种方式不是这种情况吗?

1 个答案:

答案 0 :(得分:1)

好的,我相信我发现了这个问题。这似乎指明了问题:

NetStream.client对象可以调用以下函数并接收关联的数据对象:onCuePoint(),onImageData(),onMetaData(),onPlayStatus(),onSeekPoint(),onTextData()和onXMPData( )。

所以你需要为你的onPeerConnect函数明确设置回调,我认为评论中的@Vesper可能正确,这应该有效:

class CustomClient
{
    public var _sendStream:NetStream;

    public function CustomClient()
    {    
         _sendStream = new NetStream(_nc, NetStream.DIRECT_CONNECTIONS);
         _sendStream.client = this;
         _sendStream.onPeerConnect = this.onPeerConnect;
    }

     public function onPeerConnect(subscriber:NetStream):Boolean 
    {
        trace("onPeerConnect");
        return true;
    }
}

您的第一个代码块有效,因为您正在明确设置onPeerConnect的回调。

第二,你还没有那样做。