如何实现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 屏蔽鼠标右键脚本附破解方法
Dec 03 Javascript
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
拥抱模块化的JavaScript
Mar 07 Javascript
JS执行删除前的判断代码
Feb 18 Javascript
cookie的secure属性详解
Apr 08 Javascript
Angularjs手动解析表达式($parse)
Oct 12 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
Dec 14 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
基于Element封装一个表格组件tableList的使用方法
Jun 29 Javascript
vue实现路由懒加载的3种方法示例
Sep 01 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
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python 实现简单的电话本功能
2015/08/09 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
深入理解Python3 内置函数大全
2017/11/23 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
python实现的生成word文档功能示例
2019/08/23 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
物流管理系毕业生求职信
2014/06/03 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python