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 相关文章推荐
JSON扫盲帖 JSON.as类教程
Feb 16 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
JavaScript避免代码的重复执行经验技巧分享
Apr 17 Javascript
Jquery对select的增、删、改、查操作
Feb 06 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
Vue中mintui的field实现blur和focus事件的方法
Aug 25 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 Javascript
在vue中嵌入外部网站的实现
Nov 13 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中ob_start函数的使用说明
2013/11/11 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
基于jquery实现多选下拉列表
2017/08/02 jQuery
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python实现简单日期工具类
2019/04/24 Python
深入解析神经网络从原理到实现
2019/07/26 Python
python3获取当前目录的实现方法
2019/07/29 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
python 实现两个npy档案合并
2020/07/01 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
python pip如何手动安装二进制包
2020/09/30 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
abstract是什么意思
2012/02/12 面试题
设备收款委托书范本
2014/10/02 职场文书
就业协议书范本
2014/10/08 职场文书
新员工试用期自我评价
2015/03/10 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书