如何实现JS函数的重载


Posted in Javascript onSeptember 22, 2006

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>
Javascript 相关文章推荐
通过Javascript创建一个选择文件的对话框代码
Jun 16 Javascript
Javascript表格翻页效果的具体实现
Oct 05 Javascript
JavaScript分页功能的实现方法
Apr 25 Javascript
javascript动态创建链接的方法
May 13 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
vue-router单页面路由
Jun 17 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
微信小程序自定义模态对话框实例详解
Aug 16 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
JS函数基本定义与用法示例
Jan 15 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 Javascript
扩展String功能方法
Sep 22 #Javascript
js实现ASP分页函数 HTML分页函数
Sep 22 #Javascript
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Sep 22 #Javascript
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
Sep 22 #Javascript
prototype1.4中文手册
Sep 22 #Javascript
prototype 源码中文说明之 prototype.js
Sep 22 #Javascript
showModelessDialog()使用详解
Sep 21 #Javascript
You might like
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Python进程间通信用法实例
2015/06/04 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
python导入坐标点的具体操作
2019/05/10 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
python nmap实现端口扫描器教程
2020/05/28 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
实习鉴定范文
2013/12/19 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
党员对照检查材料
2014/09/22 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js