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 相关文章推荐
TFDN图片播放器 不错自动播放
Oct 03 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
Aug 08 Javascript
jQuery textarea的长度进行验证
May 06 Javascript
基于Jquery的开发个代阴影的对话框效果代码
Jul 28 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
Dec 31 Javascript
Js 回车换行处理的办法及replace方法应用
Jan 24 Javascript
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
JavaScript中string对象
Jun 12 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
解决node.js安装包失败的几种方法
Sep 02 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 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
生成缩略图
2006/10/09 PHP
一个php作的文本留言本的例子(一)
2006/10/09 PHP
php下的权限算法的实现
2007/04/28 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
初识laravel5
2015/03/02 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
Python实现提取文章摘要的方法
2015/04/21 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
房地产财务部员工岗位职责
2014/03/12 职场文书
建筑工地大门标语
2014/06/18 职场文书
2014年店长工作总结
2014/11/17 职场文书
经典祝酒词大全
2015/08/12 职场文书
导游词之镜泊湖
2019/12/09 职场文书