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 相关文章推荐
一段实现页面上的图片延时加载的js代码
Feb 11 Javascript
jQuery的.live()和.die() 使用介绍
Sep 10 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
微信小程序 setData使用方法及常用错误解决办法
May 11 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
微信小程序开发背景图显示功能
Aug 08 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
Vue Router的手写实现方法实现
Mar 02 Javascript
JS获取当前时间戳方法解析
Aug 29 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在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php简单实现MVC
2015/02/05 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
js常用代码段整理
2011/11/30 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
Python计算回文数的方法
2015/03/11 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python3计算三角形的面积代码
2017/12/18 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
代码实例讲解python3的编码问题
2019/07/08 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
Django 解决由save方法引发的错误
2020/05/21 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
几道PHP的面试题
2012/05/19 面试题
房产转让协议书(2014版)
2014/09/30 职场文书
公司催款律师函
2015/05/27 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Mysql 文件配置解析介绍
2022/05/06 MySQL