flash – AS3可以返回两种类型的方法的最佳实践

我一直在为ActionScript 3开发一个框架,并且遇到了一个特殊的场景,我希望一个方法能够返回一个AvFrameworkObject或一个包含多个AvFrameworkObject实例的Array.

使用此方法用于注册AvFrameworkObject的一个或多个实例:

public function register(...objects):Object
{
    var reg:Array = [];

    var i:AvFrameworkObject;
    for each(i in objects)
    {
        i.fw = this;
        reg.push(i);
    }

    return reg.length > 1 ? reg : reg[0];
}

以上几点:

>这对我来说似乎非常草率.是真的吗?
>我也可以使用通配符(星号*)作为返回类型,这更有意义吗?
>是否可以实际定义两种返回类型?只是为了便于阅读等

解决方法

据我所知,所有对象都通过 by reference

In ActionScript 3.0,all arguments are passed by reference,because all values are stored as objects. However,objects that belong to the primitive data types,which includes Boolean,Number,int,uint,and String,have special operators that make them behave as if they were passed by value.

您不必返回任何内容,只需设置fw变量成员即可.

话虽这么说,你有一些关于如何返回多个变量的选项.

>一种常见的方法是返回返回的数组的计数,并使用参数来设置数组.调用就像var length:int = register(out,object1,object2,object3).然后你可以在for循环中使用length变量.
>另一种方法是返回整个数组.我认为它不需要更多解释,但我想明确表示,如果你想要一个特定的成员,你可以直接使用返回的数组.例如,如果你想要第一个对象,你可以写t:Thing = fw.register(new Thing())[0] ;.记下最后的[0].
>您也可以使用上述方法,但使用Object insted of Array.

我个人不喜欢返回一个抽象对象,通常我选择返回整个数组.

希望这可以帮助.

相关文章

  译序:JWMediaPlayer是开源的网页使用的Flash播放器。本...
    Flash编程原理都是只能将1写为0,而不能将0写成1.所...
 上传setenvgatewayip192.168.1.1;setenvserverip192.168.1...
Error:FlashDownloadFailed-"Cortex-M3"出现一般有...
jPlayer是一个用于控制和播放mp3文件的jQuery插件。它在后台...
#ifndef__FONTUPD_H__#define__FONTUPD_H__#include"sy...