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 相关文章推荐
LBS blog sql注射漏洞[All version]-官方已有补丁
Aug 26 Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 Javascript
JQuery异步获取返回值中文乱码的解决方法
Jan 29 Javascript
究竟什么是Node.js?Node.js有什么好处?
May 29 Javascript
JS实现很实用的对联广告代码(可自适应高度)
Sep 18 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
Dec 22 Javascript
浅谈AngularJS中$http服务的简单用法
May 15 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
js 数组当前行添加数据方法详解
Jul 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性能优化准备篇图解PEAR安装
2011/12/05 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
教师党性分析材料
2014/02/04 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
企业法人代表证明书
2014/09/27 职场文书
员工自我评价范文
2015/03/11 职场文书
员工手册编写范本
2015/05/14 职场文书
小学运动会前导词
2015/07/20 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书