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 相关文章推荐
javascript里的条件判断
Feb 27 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
Nov 13 Javascript
javascript 鼠标拖动图标技术
Feb 07 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
Oct 27 Javascript
详解Chai.js断言库API中文文档
Jan 31 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
Aug 24 Javascript
vue.extend与vue.component的区别和联系
Sep 19 Javascript
vue中node_modules中第三方模块的修改使用详解
May 31 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 XPath对XML文件查找及修改实现代码
2011/07/27 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
Javascript 面向对象之重载
2010/05/04 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
JS实现吸顶特效
2020/01/08 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
python和shell获取文本内容的方法
2018/06/05 Python
python实现人民币大写转换
2018/06/20 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
自荐信封面
2013/12/04 职场文书
应聘面试自我评价
2014/01/24 职场文书
集体备课反思
2014/02/12 职场文书
毕业晚会主持词
2014/03/24 职场文书
文明寝室申报材料
2014/05/12 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android