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 1.0.2
Oct 11 Javascript
JS 时间显示效果代码
Aug 23 Javascript
JavaScript函数模式详解
Nov 07 Javascript
JavaScript修改浏览器tab标题小技巧
Jan 06 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
angularJS Provider、factory、service详解及实例代码
Sep 21 Javascript
html判断当前页面是否在iframe中的实例
Nov 30 Javascript
js实时监控文本框输入字数的实例代码
Jan 18 Javascript
详解js中Array的方法及技巧
Sep 12 Javascript
vue无限轮播插件代码实例
May 10 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 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 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
python中的yield使用方法
2014/02/11 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
初中生学习的自我评价
2013/11/14 职场文书
酒店保洁主管岗位职责
2013/11/28 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
面试后的英文感谢信
2014/02/01 职场文书
公司保密承诺书
2014/03/27 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
优秀教师事迹材料
2014/12/15 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers