Heim  >  Artikel  >  Web-Frontend  >  Javascript 面向对象 重载_js面向对象

Javascript 面向对象 重载_js面向对象

WBOY
WBOYOriginal
2016-05-16 18:27:37935Durchsuche

假如 我这样定义:

复制代码 代码如下:

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中使用这样的重载。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn