如何实现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 相关文章推荐
利用jq让你的div居中的好方法分享
Nov 21 Javascript
JavaScript中的undefined学习总结
Nov 30 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
jquery选择器使用详解
Apr 08 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
jQuery实现表格元素动态创建功能
Jan 09 Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
vue项目中axios使用详解
Feb 07 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
简单了解小程序+node梳理登陆流程
Jun 24 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
模拟xcopy的函数
2006/10/09 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP实现小偷程序实例
2016/10/31 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
python编写弹球游戏的实现代码
2018/03/12 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
晚归检讨书
2014/02/19 职场文书
小学班主任研修日志
2015/11/13 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
vue判断按钮是否可以点击
2022/04/09 Vue.js