如何实现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 统计时间
Mar 09 Javascript
如何用javascript判断录入的日期是否合法
Jan 08 Javascript
javascript十个最常用的自定义函数(中文版)
Sep 07 Javascript
jQuery隐藏和显示效果实现
Apr 06 Javascript
Angularjs 动态改变title标题(兼容ios)
Dec 29 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
Feb 04 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
Angular 开发学习之Angular CLI的安装使用
Dec 31 Javascript
如何在Vue中抽离接口配置文件
Oct 31 Javascript
JavaScript构造函数原理及实现流程解析
Nov 19 Javascript
JS如何监听div的resize事件详解
Dec 03 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
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
Golang与python线程详解及简单实例
2017/04/27 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
计算机专业毕业生推荐信
2013/11/25 职场文书
个人委托书怎么写
2014/09/17 职场文书
安全生产工作汇报
2014/10/28 职场文书
2015年春节标语口号
2014/12/09 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
Tomcat用户管理的优化配置详解
2022/03/31 Servers