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 相关文章推荐
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
Mar 28 Javascript
js Event对象的5种坐标
Sep 12 Javascript
js二级地域选择的实现方法
Jun 17 Javascript
jquery实现盒子下拉效果示例代码
Sep 12 Javascript
javascript不可用的问题探究
Oct 01 Javascript
使用 js+正则表达式为关键词添加链接
Nov 11 Javascript
jQuery中extend函数详解
Jul 13 Javascript
jquery实现简单的遮罩层
Jan 08 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 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&mysql(三)
2006/10/09 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js简单时间比较的方法
2016/08/02 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
Python之eval()函数危险性浅析
2014/07/03 Python
python实现k-means聚类算法
2018/02/23 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
Python中无限循环需要什么条件
2020/05/27 Python
python中如何设置代码自动提示
2020/07/15 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
军训自我鉴定100字
2014/02/13 职场文书
人事专员的职责
2014/02/26 职场文书
保险公司晨会主持词
2014/03/22 职场文书
诚信承诺书范文
2014/03/27 职场文书
职务说明书范文
2014/05/07 职场文书
小区文明倡议书
2014/05/16 职场文书
预防煤气中毒方案
2014/06/16 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
南极大冒险观后感
2015/06/05 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis