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 相关文章推荐
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
javascript实现无限级select联动菜单
Jan 02 Javascript
javascript动态创建表格及添加数据实例详解
May 13 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
Dec 03 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
学习vue.js表单控件绑定操作
Dec 05 Javascript
jQuery 判断元素整理汇总
Feb 28 Javascript
JS实现520 表白简单代码
May 21 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
基于Node.js的大文件分片上传示例
Jun 19 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
详解解决小程序中webview页面多层history返回问题
Aug 20 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 读取文件的正确方法
2009/04/29 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
简单JS代码压缩器
2006/10/12 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
python计算书页码的统计数字问题实例
2014/09/26 Python
Python 转义字符详细介绍
2017/03/21 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python 实现UTC时间加减的方法
2018/12/31 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
入党申请书自我鉴定
2013/10/12 职场文书
上班睡觉检讨书
2014/01/09 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
学前班学生评语
2014/12/29 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python