Javascript 面向对象之重载

 更新时间:2010年05月04日 15:02:00   作者:  
在面向对象语言里重载是很重要的一个特性,而JavaScript这个自称面向对象的语言竟然没有直接提供重载的功能。
上几节讲了 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中使用这样的重载。

相关文章

  • 学习JS面向对象成果 借国庆发布个最新作品与大家交流

    学习JS面向对象成果 借国庆发布个最新作品与大家交流

    学习JS面向对象成果,借国庆发布个最新作品与大家交流,大家可以看下。
    2009-10-10
  • Javascript 对象的解释

    Javascript 对象的解释

    ECMAScript没有像C++,Smalltalk,或者java中那样规矩的类,可是它支持通过执行分配空间的代码来创建对象、并初始化对象所有或者一部分属性的构造器。
    2008-11-11
  • JavaScript 面向对象入门精简篇

    JavaScript 面向对象入门精简篇

    围绕面向对象的几大关键字:封装 ,继承 ,多态 ,展开JavaScript面向对象
    2009-03-03
  • JavaScript为对象原型prototype添加属性的两种方式

    JavaScript为对象原型prototype添加属性的两种方式

    为对象原型prototype添加属性的的方法, 需要的朋友可以参考下。
    2010-08-08
  • JavaScript 基于原型的对象(创建、调用)

    JavaScript 基于原型的对象(创建、调用)

    在我们写js代码的时候,内部对象是不可避免的要引用,但是光靠这些对象是不够的,所以需要我们自己定义对象,这个时候通常用到的对象是第三种,即基于原型的对象,下面就如何创建自己的对象,定义对象的方法、属性,调用对象给出详细的说明。
    2009-10-10
  • javascript 面向对象编程 万物皆对象

    javascript 面向对象编程 万物皆对象

    javascript几乎成了如今web开发人员必学必会的一门语言,但很多人却只停在了一些表单验证等基础操作层面上,在面向对象语言大行其道的当下,我们需要去学习javascript的面向对象的知识,以便更好的掌握javascript、为深入理解各种脚本框架打好基础。
    2009-09-09
  • JS类定义原型方法的两种实现的区别评论很多

    JS类定义原型方法的两种实现的区别评论很多

    JS类定义原型方法的两种实现的区别评论很多...
    2007-09-09
  • javascript 写类方式之十

    javascript 写类方式之十

    mootools.js的最新版本是1.2.3,这里使用的是1.2.0。mootool被设计成非常紧凑的,模块化的,面向对象的的js库。mootool中写类用Class类。
    2009-07-07
  • JavaScript 构造函数 面相对象学习必备知识

    JavaScript 构造函数 面相对象学习必备知识

    关于JavaScript构造函数,如今出现了很多JavaScript的框架,例如jQuery、Ext等等这些,这些将JavaScript作为一种面向对象的语言进行编程,那么JavaScript到底是怎么样实现面向对象的一些特征的呢,首先,我们来看看JavaScript怎么样来定义一个构造函数。
    2010-06-06
  • Javascript 类与静态类的实现(续)

    Javascript 类与静态类的实现(续)

    由于MM的事件已干完,接着我们的静态类的实现。这东西在Javascript里用得会非常的频繁,因为针对现在的网页,多个基于同一个类对象的页面不多,往往不同块对象的交互就可以解决问题了,这就需要在JS针对元素定义几个静态类就可以完事了,进入正题。
    2010-04-04

最新评论