Javascript 面向对象之重载


Posted in Javascript onMay 04, 2010

上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 与 JavaScript 面向对象的之私有成员和公开成员 ,大家可以先看上面的再继续往下看。

假如 我这样定义:

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 相关文章推荐
js jquery数组介绍
Jul 15 Javascript
使用JavaScript的AngularJS库编写hello world的方法
Jun 23 Javascript
JavaScript记录光标在编辑器中位置的实现方法
Apr 22 Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 Javascript
JS声明式函数与赋值式函数实例分析
Dec 13 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
Aug 23 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
mpvue 页面预加载新增preLoad生命周期的两种方式
Oct 17 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
Oct 31 Javascript
JavaScript 面向对象的之私有成员和公开成员
May 04 #Javascript
javascript 面向对象的JavaScript类
May 04 #Javascript
JavaScript 面向对象之命名空间
May 04 #Javascript
10个实用的脚本代码工具
May 04 #Javascript
利用location.hash实现跨域iframe自适应
May 04 #Javascript
Array.prototype 的泛型应用分析
Apr 30 #Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 #Javascript
You might like
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
应届生求职自荐信范文
2014/04/07 职场文书
英语故事演讲稿
2014/04/29 职场文书
诚信考试标语
2014/06/24 职场文书
2014年资料员工作总结
2014/11/18 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
文明上网主题班会
2015/08/14 职场文书
科级干部培训心得体会
2016/01/06 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers
SQL Server 中的事务介绍
2022/05/20 SQL Server