如何实现JS函数的重载

 更新时间:2006年09月22日 00:00:00   作者:  
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>

相关文章

  • webpack源码中一些精妙的方法总结

    webpack源码中一些精妙的方法总结

    正好最近在学习webpack的源码,所以下面这篇文章主要给大家介绍了关于webpack源码中一些精妙的方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • SWFObject Flash js调用类

    SWFObject Flash js调用类

    一直想为 SWFObject 这个JS的类库写一个推荐帖,因为他轻便,同时功能强大,为我们的开发带来了很大的便捷。
    2008-07-07
  • JavaScript中常用的动画事件使用方法

    JavaScript中常用的动画事件使用方法

    JavaScript在处理动画方面极富灵活性,提供了一系列事件,使得开发者能够更精准地控制动画执行的各个阶段,使用这些事件,可以在动画开始、结束、重复等动作发生时执行特定的行为,本文将详细介绍JavaScript中常用的动画事件,并展示其使用方法
    2023-12-12
  • javascript实现去除HTML标签的方法

    javascript实现去除HTML标签的方法

    这篇文章主要介绍了javascript实现去除HTML标签的方法,涉及javascript正则替换相关操作技巧,需要的朋友可以参考下
    2016-12-12
  • Javascript:为input设置readOnly属性(示例讲解)

    Javascript:为input设置readOnly属性(示例讲解)

    本篇文章主要是对Javascript中为input设置readOnly属性的示例代码进行了介绍。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • html5+javascript实现简单上传的注意细节

    html5+javascript实现简单上传的注意细节

    这篇文章主要为大家详细介绍了html5+javascript实现上传操作的注意细节,form表单样式不美观等细节问题,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • JS+CSS实现分类动态选择及移动功能效果代码

    JS+CSS实现分类动态选择及移动功能效果代码

    这篇文章主要介绍了JS+CSS实现分类动态选择及移动功能效果代码,涉及JavaScript实现页面元素动态变换效果实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 微信小程序自定义Modal弹框

    微信小程序自定义Modal弹框

    这篇文章主要为大家详细介绍了微信小程序自定义Modal弹框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • javascript 匿名函数的理解(透彻版)

    javascript 匿名函数的理解(透彻版)

    网上很多解释,我无法理解,我想知道原理。。。这篇文章应该可以透彻一点
    2010-01-01
  • js中查找最近的共有祖先元素的实现代码

    js中查找最近的共有祖先元素的实现代码

    司徒正美给出的题,也尝试着写一下。希望大家多多交流。
    2010-12-12

最新评论