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 相关文章推荐
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
jquery手风琴特效插件
Feb 04 Javascript
JS本地刷新返回上一页代码
Jul 25 Javascript
js实现图片缓慢放大缩小效果
Aug 02 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 Javascript
利用Angular2的Observables实现交互控制的方法
Dec 27 Javascript
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
php实现监听事件
2013/11/06 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
前端常见跨域解决方案(全)
2017/09/19 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
付款委托书范本
2014/10/05 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技