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 相关文章推荐
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
JavaScript?Apple设备检测示例代码
Nov 15 Javascript
Area 区域实现post提交数据的js写法
Apr 22 Javascript
常用的jQuery前端技巧收集
Dec 24 Javascript
纯js实现重发验证码按钮倒数功能
Apr 21 Javascript
node模块机制与异步处理详解
Mar 13 Javascript
jQuery代码性能优化的10种方法
Jun 21 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
浅析JavaScript中break、continue和return的区别
Nov 30 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
Mar 09 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
node中使用es6/7/8(支持性与性能)
Mar 28 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/11/25 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
数控机械专业个人的自我评价
2014/01/02 职场文书
建筑设计学生的自我评价
2014/01/16 职场文书
顶撞老师检讨书
2014/02/07 职场文书
经理助理岗位职责
2014/03/05 职场文书
初一学生期末评语
2014/04/24 职场文书
学风建设演讲稿
2014/09/12 职场文书
党支部四风整改方案
2014/10/25 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
工作经验交流材料
2014/12/30 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL