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的事件绑定的一些思考(补充)
Apr 20 Javascript
js文件缓存之版本管理详解
Jul 05 Javascript
jquery.form.js用法之清空form的方法
Mar 07 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
jQuery操作基本控件方法实例分析
Dec 31 Javascript
jstl中判断list中是否包含某个值的简单方法
Oct 14 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 Javascript
JS倒计时实例_天时分秒
Aug 22 Javascript
angular中如何绑定iframe中src的方法
Feb 01 Javascript
jQuery中getJSON跨域原理的深入讲解
Sep 02 jQuery
Vue页面跳转传递参数及接收方式
Sep 09 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
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php字符串截取的简单方法
2013/07/04 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
采购内勤岗位职责
2013/12/10 职场文书
广告学专业求职信
2014/06/19 职场文书
授权委托书范文
2014/07/31 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
2015年学校政教工作总结
2015/07/20 职场文书