如何实现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实现二分查找法实现代码
Nov 12 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
js监听键盘事件示例代码
Jul 26 Javascript
BootStrap glyphicons 字体图标实现方法
May 01 Javascript
jquery.validate使用详解
Jun 02 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
javascript中UMD规范的代码推演
Aug 29 Javascript
vue addRoutes路由动态加载操作
Aug 04 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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
php切割页面div内容的实现代码分享
2012/07/31 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python中的yield浅析
2014/06/16 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
优秀毕业生推荐信
2013/11/02 职场文书
警察群众路线整改措施
2014/09/26 职场文书
出差报告怎么写
2014/11/06 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
借款民事起诉状范文
2015/05/19 职场文书
跑出一片天观后感
2015/06/08 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS