如何实现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 相关文章推荐
jquery插件制作 手风琴Panel效果实现
Aug 17 Javascript
JS的数组迭代方法
Feb 05 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
javascript中Date对象的使用总结
Nov 21 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
bootstrap Table实现合并相同行
Jul 19 Javascript
微信小程序实现pdf、word等格式文件上传的方法
Sep 10 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
Oct 26 Javascript
Vue实现点击当前行变色
Dec 14 Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 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
JavaScript 不只是脚本
2007/05/30 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python发腾讯微博代码分享
2014/01/10 Python
python实现360的字符显示界面
2014/02/21 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python dict乱码如何解决
2020/06/07 Python
python语言是免费还是收费的?
2020/06/15 Python
python爬取招聘要求等信息实例
2020/11/20 Python
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
局域网标准
2016/09/10 面试题
高中生学习总结的自我评价范文
2013/10/13 职场文书
生产部主管岗位职责
2014/01/06 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
换届选举主持词
2015/07/03 职场文书
干部理论学习心得体会
2016/01/21 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS