• 如何实现JS函数的重载


    javascript不能支持函数的重载,如下:

    复制代码 代码如下:

    <script language="JavaScript">
    function f(length)
    {
        alert("高为:"+length);
    }

    function f(length,width)
    {
        alert("高为:"+length+",宽为:"+width);
    }
    </srcipt>


    上面那段代码其实是行不通的,因为函数定义时的参数个数和函数调用时的参数个数没有任何关系。 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,所以定义function(length),后面用f(10,10)调用是没有问题的。所以在上面这段代码中,第二个函数是永远不可能被调用到的,那么,要怎样才能实现像函数重载那样的功能呢?
        那就是在函数定义中用f.arguments.length判断一下调用时传入的参数个数。然后对不同的情况采用不同的处理方式。
    如下:

    复制代码 代码如下:

    <script language="JavaScript">
    function f()
    {
        var len= arguments.length;
        if(1 == len)
        {
            var length = arguments[0];
            var width = arguments[1];
            f2(length,width);
        }
        else
        {
            var length = arguments[0];
            f1(length);
        }
    }

    function f1(length)
    {
        alert("高为:"+length);
    }

    function f2(length,width)
    {
        alert("高为:"+length+",宽为:"+width);
    }
    </srcipt>


    这样,你就可以给函数f()传入一个参数也可以传入两个参数了,比如f(10)和f(10,10);
        个人觉得,这样虽然可以实现重载,但也不是很好用,我们可以根据具体情况在一个函数中实现重载,如果要重载的两个函数相差较大,那就保留两个函数,而如果两个函数的实现基本差不多,那么可以在一个函数中进行判断,处理不同的部分,而不需要像上面那样写成三个函数,如下:

    复制代码 代码如下:

    <script language="JavaScript">
    function f(length)
    {
        var len= arguments.length;
        if(1 == len)
        {
            var width = arguments[1];
            alert("高为:"+length+",宽为:"+width);
        }
        else
        {
            alert("高为:"+length);
        }
    }
    </srcipt>
     
    http://www.jb51.net/article/1081.htm
  • 相关阅读:
    【闲暇研究】某问道,问问,道道宠物素材整理
    小米手机刷机,官方教程。
    【闲暇研究】某问道,每日极品道具体验礼包。
    【闲暇研究】某问道,悟道只能用银元宝。
    Windows Server 2016从Evaluation评估版转换成正式版
    【闲暇研究】某问道,仙元、道具合成的修改,与参考文件。
    关于小米手机安装APP总是提示“与已安装应用签名不同”的问题
    WebStorm的快捷键,技巧
    Webstorm(常见配置+Emmet简单语法)
    05-方法重写
  • 原文地址:https://www.cnblogs.com/cmblogs/p/6378834.html
Copyright © 2020-2023  润新知