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 tools系列 expose 学习
Sep 06 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
Jan 12 Javascript
JS 页面计时器示例代码
Oct 28 Javascript
jquery复选框checkbox实现删除前判断
Apr 20 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 Javascript
一步步教你利用Canvas对图片进行处理
Sep 19 Javascript
用p5.js制作烟花特效的示例代码
Mar 21 Javascript
js利用递归与promise 按顺序请求数据的方法
Aug 30 Javascript
js 闭包深入理解与实例分析
Mar 19 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 jQuery
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反射应用示例
2014/02/25 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
Python基于有道实现英汉字典功能
2015/07/25 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
营业经理岗位职责
2013/11/10 职场文书
天地会口号
2014/06/17 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
售票员岗位职责
2015/02/15 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书