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 相关文章推荐
javascript循环变量注册dom事件 之强大的闭包
Sep 08 Javascript
五个jQuery图片画廊插件 推荐
May 12 Javascript
json字符串之间的相互转换示例代码
Aug 21 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
Sep 28 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
解决vue 项目引入字体图标报错、不显示等问题
Sep 01 Javascript
vue2.x数组劫持原理的实现
Apr 19 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
Oct 31 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
JavaScript 事件对象的实现
2009/07/13 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
js实现移动端轮播图
2020/12/21 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
Python Pandas 箱线图的实现
2019/07/23 Python
Python 实现数组相减示例
2019/12/27 Python
浅析python标准库中的glob
2020/03/13 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
英语系本科生个人求职信
2013/09/21 职场文书
思想汇报格式
2014/01/05 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
多人股份制合作协议书
2016/03/19 职场文书
python缺失值填充方法示例代码
2022/12/24 Python