如何实现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 相关文章推荐
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
javascript 动态创建表格的2种方法总结
Mar 04 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
JS判断一个数是否是水仙花数
Jun 11 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
vue通过cookie获取用户登录信息的思路详解
Oct 30 Javascript
使用flow来规范javascript的变量类型
Sep 12 Javascript
JS图片懒加载的优点及实现原理
Jan 10 Javascript
基于JavaScript实现省市联动效果
Jun 22 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
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
页面使用密码保护代码
2013/04/10 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
法律七进实施方案
2014/03/15 职场文书
ktv好的活动方案
2014/08/15 职场文书
师德师风学习材料
2014/12/19 职场文书
留学推荐信怎么写
2015/03/26 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js