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 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
拖动Html元素集合 Drag and Drop any item
Dec 22 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
JavaScript实现点击单元格改变背景色的方法
Feb 12 Javascript
Extjs实现下拉菜单效果
Apr 01 Javascript
Javascript中作用域的详细介绍
Oct 06 Javascript
浅析JavaScript中break、continue和return的区别
Nov 30 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
Sep 10 jQuery
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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python实现图片批量压缩程序
2018/07/23 Python
Python Series从0开始索引的方法
2018/11/06 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
基于python实现文件加密功能
2020/01/06 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
战马观后感
2015/06/08 职场文书
地雷战观后感
2015/06/09 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书