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对象模型-执行模型
Apr 28 Javascript
JS 学习笔记 防止发生命名冲突
Jul 30 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
jQuery常见开发技巧详细整理
Jan 02 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
Mar 03 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
微信小程序 参数传递详解
Oct 24 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
Mar 11 Javascript
JavaScript初学者必看“new”
Jun 12 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
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/06/30 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Python初学者常见错误详解
2019/07/02 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
如何一键升级Python所有包
2020/11/05 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
小学教研工作制度
2014/01/15 职场文书
初一家长会邀请函
2014/01/31 职场文书
厂长岗位职责
2014/02/19 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python