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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
网页上的Javascript编辑器和代码格式化
Apr 25 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
js改变Iframe中Src的方法
May 05 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
微信小程序实现登录页云层漂浮的动画效果
May 05 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
three.js欧拉角和四元数的使用方法
Jul 26 Javascript
Element PageHeader页头的使用方法
Jul 26 Javascript
ztree+ajax实现文件树下载功能
May 18 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 循环列出目录内容的函数代码
2010/05/26 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
python处理中文编码和判断编码示例
2014/02/26 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
python操作redis数据库的三种方法
2020/09/10 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
护士自荐信怎么写
2013/10/18 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
寒假家长评语大全
2014/04/16 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
诉前财产保全担保书
2014/05/20 职场文书
法学专业求职信
2014/07/15 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
合同纠纷调解书
2015/05/20 职场文书
小学运动会加油词
2015/07/18 职场文书
物业管理交接协议书
2016/03/24 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python