如何实现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 相关文章推荐
利用onresize使得div可以随着屏幕大小而自适应的代码
Jan 15 Javascript
用JS实现一个TreeMenu效果分享
Aug 28 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
Android中的jQuery:AQuery简介
May 06 Javascript
JavaScript获取数组最小值和最大值的方法
Jun 09 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
vue 使用async写数字动态加载效果案例
Jul 18 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 Javascript
element tree树形组件回显数据问题解决
Aug 14 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
php获取apk包信息的方法
2014/08/15 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
jquery常用操作小结
2014/07/21 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
解决layer.open后laydate失效的问题
2019/09/06 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python获取图片颜色信息的方法
2015/03/18 Python
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python实现远程控制电脑
2019/05/23 Python
python区块及区块链的开发详解
2019/07/03 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
用 python 进行微信好友信息分析
2020/11/28 Python
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
Delphi软件工程师试题
2013/01/29 面试题
党员个人公开承诺书
2014/08/29 职场文书
2015年度党员个人总结
2015/02/14 职场文书
关于倡议书的范文
2015/04/29 职场文书
结婚主持人致辞
2015/07/28 职场文书
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers