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 相关文章推荐
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 Javascript
用JavaScript修改CSS属性的代码
May 06 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
javascript的正则匹配方法学习
Feb 24 Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
Jun 02 Javascript
javascript宿主对象之window.navigator详解
Sep 07 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
详解ES6 Fetch API HTTP请求实用指南
Nov 14 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
May 17 jQuery
Vue——前端生成二维码的示例
Dec 19 Vue.js
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读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
多版本Python共存的配置方法
2017/05/22 Python
python数据结构之链表详解
2017/09/12 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
django创建css文件夹的具体方法
2020/07/31 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
表彰先进的通报
2014/01/31 职场文书
奥运会口号
2014/06/13 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
先进单位事迹材料
2014/12/25 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
治庸问责工作总结
2015/08/11 职场文书
大学生村官工作心得体会
2016/01/23 职场文书