Charles-Lee 发表于 2012-12-22 21:17:07

Javascript面向对象的多态特性

Javascript面向对象的多态特性

<div id="cnblogs_post_body">
   Javascript已经可以模拟出面向对象的封装和继承特性,但是不幸的是Javascript对多态特性的支持非常弱!其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现!
   重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义的方法会覆盖先定义的方法!   既然解释器无法分辨重载方法,那就手动区分不同的方法:
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"> <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">var MyClass=function(){    var AddNum=function(a,b){      return a+b;    }    var AddString=function(a,b){      return "I am here"+a+b;    }    this.Add=function(a,b){      if(typeof(a)=="number")            return AddNum(a,b);      else            return AddString(a,b);    }}var MyObj = new MyClass();var X = MyObj.Add(5,6);var Y = MyObj.Add("A","FFFFFF");alert(X);      //结果:11alert(Y);      //结果:I am hereAFFFFFF
页: [1]
查看完整版本: Javascript面向对象的多态特性