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 相关文章推荐
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
js图片预加载示例
Apr 30 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 Javascript
Ionic快速安装教程
Jun 03 Javascript
微信小程序  生命周期详解
Oct 27 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
vue-lazyload图片延迟加载插件的实例讲解
Feb 09 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
May 14 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
php下的权限算法的实现
2007/04/28 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
基于header的一些常用指令详解
2013/06/06 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
python装饰器与递归算法详解
2016/02/18 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
python 读写中文json的实例详解
2017/10/29 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
Python字典的核心底层原理讲解
2019/01/24 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
金智子午JAVA面试题
2015/09/04 面试题
入党积极分子思想汇报范文
2014/01/05 职场文书
自荐信的基本格式
2014/02/22 职场文书
大学军训感言400字
2014/03/11 职场文书
小学生环保演讲稿
2014/04/25 职场文书
小学元宵节活动总结
2015/02/06 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python