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 相关文章推荐
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
GreyBox技术总结(转)
Nov 23 Javascript
关于JS控制代码暂停的实现方法分享
Oct 11 Javascript
JS中判断JSON数据是否存在某字段的方法
Mar 07 Javascript
js返回前一页刷新本页重载页面
Jul 29 Javascript
详解javascript数组去重问题
Nov 06 Javascript
解决JS外部文件中文注释出现乱码问题
Jul 09 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
vue实现路由监听和参数监听
Oct 29 Javascript
解决在Vue中使用axios用form表单出现的问题
Oct 30 Javascript
uni-app实现获取验证码倒计时功能
Nov 01 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python 从远程服务器下载东西的代码
2013/02/10 Python
Python 错误和异常小结
2013/10/09 Python
python操作 hbase 数据的方法
2016/12/18 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
安全资料员岗位职责
2013/12/14 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
小学老师寄语大全
2014/04/04 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
边城读书笔记
2015/06/29 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书