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 相关文章推荐
许愿墙中用到的函数
Oct 07 Javascript
关于js类的定义
Jun 28 Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
TypeError document.getElementById(...) is null错误原因
May 18 Javascript
jQuery的实例及必知重要的jQuery选择器详解
May 20 Javascript
JavaScript解八皇后问题的方法总结
Jun 12 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
Sep 19 Javascript
不使用 JS 匿名函数理由
Nov 17 Javascript
JS+CSS实现过渡特效
Jan 02 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
php4的彩蛋
2006/10/09 PHP
一个PHP分页类的代码
2011/05/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
javascript 函数调用的对象和方法
2010/07/01 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
浅析Angular19 自定义表单控件
2018/01/31 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
彻底搞懂Python字符编码
2018/01/23 Python
实例介绍Python中整型
2019/02/11 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
如何利用python读取micaps文件详解
2020/10/18 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
家教广告词
2014/03/19 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
给校长的建议书200字
2014/05/16 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
python实现批量移动文件
2021/04/05 Python