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 replace方法与正则表达式
Feb 19 Javascript
JQuery 学习笔记 选择器之二
Jul 23 Javascript
学习ExtJS Window常用方法
Oct 07 Javascript
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
May 13 Javascript
jquery indexOf使用方法
Aug 19 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
javascript实现不同颜色Tab标签切换效果
Apr 27 Javascript
基于Vuejs的搜索匹配功能实现方法
Mar 03 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
微信小程序实用代码段(收藏版)
Dec 17 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开发环境配置记录
2011/01/14 PHP
php查看当前Session的ID实例
2015/03/16 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
Python运算符重载详解及实例代码
2017/03/07 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
python机器学习实现决策树
2019/11/11 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
SQL面试题
2013/04/30 面试题
医护人员英文求职信范文
2013/11/26 职场文书
个人现实表现材料
2014/02/04 职场文书
军训自我鉴定100字
2014/02/13 职场文书
前台文员岗位职责
2015/02/04 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
学历证明样本
2015/06/16 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
党员心得体会范文2016
2016/01/23 职场文书