C++里有很多好用的特性,比如函数重载:
函数重载:同一个函数名,根据不同的参数列表来调用不同的函数。
不同的参数列表:不同是参数个数,不同的参数类型,或者参数类型顺序不同。 跟函数返回类型没关系。
当然函数重载也包括构造函数重载。
有关更详细的函数重载请看这里。
至于AS的函数重载请看下面。
AS并没有像C++一样提供语言级的支持,但是AS里有个关键字... (rest)
... (rest) 指定函数将接受任意数目的用逗号分隔的参数。
OK,有了它,我们可以模拟函数重载。
我们自己先规定好,可接受的参数列表,然后去做相应的处理。
- 好处:使用者只需使用一个函数名即可实现不同的功能,当然这些功能应该都是相近的
 - 坏处:没有了编译时错误,使因手写出错的几率增加
 
如果上面的没怎么明白,请看下面的代码,看了之后相信你就会明白,然后说:“哦,原来是这样啊,AS真的很强大! :lol: ”
package  
{
    import flash.display.Sprite;
    /**
     * www.litefeel.com
     * @author lite3
     */    public class Test extends Sprite
    {
        public function Test() 
        {
            var sumer:Sumer = new Sumer();
            // 添加一个数字
            sumer.add(1);
            // 添加一个字符串类型的数字
            sumer.add("1");
            // 添加一个数字列表
            sumer.add([1, 2, 3]);
            // 添加两个数值之间的所有数字
            sumer.add(1, 5);
            // 添加一个错误的参数列表
            //sumer.add(1, 2, 3);
        }
    }
}
class Sumer
{
    /**
     * 增加数值
     * 
     * ------------------------------------
     * 增加一个数字 
     * function addNumber(num:Number):void;
     * @param   num 要增加的数字
     * ------------------------------------
     * 增加一个字符串形式的数字 
     * function addString(num:String):void;
     * @param   num 要增加的数字的字符串
     * ------------------------------------
     * 增加一个数组里的所有元素
     * function addList(list:Array):void;
     * @param   list
     * ------------------------------------
     * 增加两个数值之间的所有数字
     * function addAllBetween(beginNum:Number, endNum:Number):void;
     * @param   beginNum    开始数字
     * @param   endNum      结束数字
     */    public function add(... arg):void
    {
        // 判断是否没有匹配的参数列表
        var hasErr:Boolean = false;
        // 区别不同的参数个数,只有一个参数
        if (1 == arg.length)
        {
            // 符合 addNumber 的参数列表
            if (arg[0] is Number)
            {
                addNumber(arg[0]);
            }
            // 符合 addString 的参数列表
            else if (arg[0] is String)
            {
                addString(arg[0]);
            }
            // 符合 addList 的参数列表
            else if (arg[0] is Array)
            {
                addList(arg[0]);
            }
            // 没有符合一个参数的参数列表
            else
            {
                hasErr = true;
            }
        }
        // 有两个参数
        else if (2 == arg.length)
        {
            // 符合 addAllBetween的参数列表
            if ((arg[0] is Number) && (arg[1] is Number))
            {
                addAllBetween(arg[0], arg[1]);
            }
            // 没有符合两个参数的参数列表
            else
            {
                hasErr = true;
            }
        }
        // 没有符合其他个数的参数列表
        else
        {
            hasErr = true;
        }
        // 纠错
        if (hasErr) throw new ArgumentError("参数列表不正确!");
    }
    private function addNumber(num:Number):void 
    { 
        trace("addNumber:  num = ", num);
    }
    private function addString(num:String):void
    {
        trace("addString:  num = ", num);
    }
    private function addList(list:Array):void
    {
        trace("addList:  list = ", list);
    }
    private function addAllBetween(beginNum:Number, endNum:Number):void
    {
        trace("addAllBetween:  beginNum = ", beginNum, "   endNum = ", endNum);
    }
}
 运行结果:
addNumber:  num =  1
addString:  num =  1
addList:  list =  1,2,3
addAllBetween:  beginNum =  1     endNum =  5
 » 转载请注明来源:www.litefeel.com » 《AS 函数重载》
» 本文链接地址:https://www.litefeel.com/function-overloading-for-as3/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/function-overloading-for-as3/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
This post was last modified on 2019 年 03 月 04 日 01:07
View Comments (2)
@Jing
switch 也Ok的, switch嵌套也不好看的,O(∩_∩)O~ :razz:
建议使用switch