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 相关文章推荐
Javascript 继承机制的实现
Aug 12 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
多种方法判断Javascript对象是否存在
Sep 22 Javascript
javascript刷新父页面的各种方法汇总
Sep 03 Javascript
javascript常用函数归纳整理
Oct 31 Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
May 31 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
Jun 04 Javascript
微信小程序时间戳转日期的详解
Apr 30 Javascript
p5.js实现动态图形临摹
Oct 23 Javascript
js原生map实现的方法总结
Jan 19 Javascript
JavaScript实现一键复制内容剪贴板
Jul 23 Javascript
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
PHP目录操作实例总结
2016/09/27 PHP
php可变长参数处理函数详解
2017/02/22 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
python清除字符串中间空格的实例讲解
2018/05/11 Python
对pandas中to_dict的用法详解
2018/06/05 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Python eval函数介绍及用法
2020/11/09 Python
如何利用python生成MD5并去重
2020/12/07 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
校领导推荐信
2013/11/01 职场文书
辅导员评语
2014/05/04 职场文书
长城导游词400字
2015/01/30 职场文书
停电通知范文
2015/04/16 职场文书
党支部考察意见范文
2015/06/02 职场文书
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫