如何实现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对象模型-执行模型
Apr 28 Javascript
RequireJS使用注意细节
May 15 Javascript
总结JavaScript的正则与其他语言的不同之处
Aug 25 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
vue-router相关基础知识及工作原理
Mar 16 Javascript
vue利用axios来完成数据的交互
Mar 23 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
JavaScript命名空间模式实例详解
Jun 20 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
Aug 26 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
如何利用JavaScript实现二叉搜索树
Apr 02 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
基于jQuery的表格操作插件
2010/04/22 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
JS打印组合功能
2016/08/04 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
解决python 上传图片限制格式问题
2019/10/30 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
计算机维护专业推荐信
2014/02/27 职场文书
作风建设演讲稿
2014/05/23 职场文书
三八活动策划方案
2014/08/17 职场文书
李白故里导游词
2015/02/12 职场文书
师德承诺书2015
2015/04/28 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
mysql数据库隔离级别详解
2022/06/16 MySQL