Javascript 面向对象 重载


Posted in Javascript onMay 13, 2010

假如 我这样定义:

function getDate(){.....} 
function getDate(date){.....}

那么后一个方法将覆盖前一个,虽然不报错。

但是我们确实是可以实现重载的,如果你用过jQuery,你就会深有体会,比如$("#btn").val() 是获取id为"btn"的按钮的value值,而$("#btn").val("点我")则是给id为"btn"的按钮赋值。

那么JavaScript是怎么实现(准确地讲应该叫“模拟”)的呢?。
答案很简单:arguments
arguments是JavaScript里的一个内置对象,包含了调用者传递的实际参数,但不局限于函数声明所定义的参数列表,而调用时只它和数组一样有个length属性。 

我们暂且把它当“数组”来理解吧,我们根据该数组的长度以及其元素的类型来选择不同的实现,从而模拟了重载。 

具体请看下面的示例:

function getDate(){ 
if(arguments.length==0){ 
var date=new Date().toLocaleDateString(); 
return "您没有输入参数,现在时间:"+date ; 
} if(arguments.length==1){ 
if(arguments[0].constructor ==Date){ 
return "您输入的参数是Date类型,现在时间是:"+arguments[0].toDateString(); 
} 
if(arguments[0].constructor ==String){ 
return "您输入的参数是String类型,现在时间是:"+arguments[0]; 
} 
} 
}

于是我们可以这样调用:

getDate()
getDate(new Date())
getDate("星期一")

这样就实现了JavaScript的重载,不过我们发现这样的“实现”实在是太勉强了,如果参数多了,就会显得力不从心,代码也会很乱,到处是if{...} 。所以我不建议在JavaScript中使用这样的重载。

Javascript 相关文章推荐
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
Vuejs第十二篇之动态组件全面解析
Sep 09 Javascript
JavaScript 是什么意思
Sep 22 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
细说webpack源码之compile流程-rules参数处理技巧(2)
Dec 26 Javascript
vue2.0安装style/css loader的方法
Mar 14 Javascript
angularjs实现的购物金额计算工具示例
May 08 Javascript
微信小程序文章详情功能完整实例
Jun 03 Javascript
jQuery实现滑动开关效果
Aug 02 jQuery
JavaScript 面向对象的 私有成员和公开成员
May 13 #Javascript
限制文本框输入N个字符的js代码
May 13 #Javascript
javascript preload&lazy load
May 13 #Javascript
javascript 当前日期转化为中文的实现代码
May 13 #Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
May 13 #Javascript
IE8下关于querySelectorAll()的问题
May 13 #Javascript
关于可运行代码无法正常执行的使用说明
May 13 #Javascript
You might like
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
JS中的多态实例详解
2017/10/15 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
详解Python多线程
2016/11/14 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
Python中 map()函数的用法详解
2018/07/10 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
最小二乘法及其python实现详解
2020/02/24 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Python 高效编程技巧分享
2020/09/10 Python
python搜索算法原理及实例讲解
2020/11/18 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
文员自我评价怎么写
2013/09/19 职场文书
管理工程专业求职信
2014/08/10 职场文书
2014年统战工作总结
2014/12/09 职场文书
教师年终个人总结
2015/02/11 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers