如何实现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 getComputedStyle获取和设置style的原理
Oct 10 Javascript
利用javascript移动div层-javascript 拖动层
Mar 22 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
vue组件学习教程
Sep 09 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
Oct 31 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
简述ES6新增关键字let与var的区别
Aug 23 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 Javascript
javascript实现贪吃蛇小游戏
Jul 28 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
扩展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 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
Python实现excel转sqlite的方法
2017/07/17 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
python实现微信远程控制电脑
2018/02/22 Python
对Python 数组的切片操作详解
2018/07/02 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
英国绿色商店:Natural Collection
2019/05/03 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
大专应届生个人简历的自我评价
2013/10/15 职场文书
酒店服务与管理毕业生求职信
2013/11/02 职场文书
优秀干部获奖感言
2014/01/31 职场文书
初一新生军训方案
2014/05/22 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
Python List remove()实例用法详解
2021/08/02 Python
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android
详解Python如何批量采集京东商品数据流程
2022/01/22 Python