如何实现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小数四舍五入多种方法实现
Dec 23 Javascript
document.documentElement和document.body区别介绍
Sep 16 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
javascript类型转换示例
Apr 29 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
Javascript使用uploadify来实现多文件上传
Nov 16 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
Dec 14 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
koa+jwt实现token验证与刷新功能
May 30 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 serialize()与unserialize()的用法
2013/06/05 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
php支付宝APP支付功能
2020/07/29 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
非常好的js代码
2006/06/27 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
浅析Python数据处理
2018/05/02 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
parser.add_argument中的action使用
2020/04/20 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
工程采购员岗位职责
2014/03/09 职场文书
法定代表人身份证明书
2015/06/18 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
解析Java中的static关键字
2021/06/14 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
浅谈Python中对象是如何被调用的
2022/04/06 Python
Redis入门基础常用操作命令整理
2022/06/01 Redis
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS