Javascript面向对象的多态特性
2009-05-07 22:47
232 查看
Javascript已经可以模拟出面向对象的封装和继承特性,但是不幸的是Javascript对多态特性的支持非常弱!其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现!
重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义的方法会覆盖先定义的方法!
既然解释器无法分辨重载方法,那就手动区分不同的方法:
虚方法:
由于Javascript解释执行的特性,因此可以再基类中调用将要在派生类中定义的方法,那么这个基类方法就相当于虚方法,可以实现模拟多态!
重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义的方法会覆盖先定义的方法!
既然解释器无法分辨重载方法,那就手动区分不同的方法:
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); //结果:11 alert(Y); //结果:I am hereAFFFFFF
虚方法:
function BaseClass(){ this.Hello=function(){ return this.Say(); } } function MyClassA(){ this.Say=function(){ return "Hello"; } } function MyClassB(){ this.Say=function(){ return "This is MyClassB"; } } MyClassA.prototype = new BaseClass(); MyClassB.prototype = new BaseClass(); var ObjA = new MyClassA(); var XX = ObjA.Hello(); alert(XX); //结果:Hello var ObjB = new MyClassB(); var YY = ObjB.Hello(); alert(YY); //结果:This is MyClassB
由于Javascript解释执行的特性,因此可以再基类中调用将要在派生类中定义的方法,那么这个基类方法就相当于虚方法,可以实现模拟多态!
相关文章推荐
- 模拟Javascript面向对象的多态特性
- JavaScript基础--面向对象三大特性(八):继承封装多态
- prototype.js 让你更深入的了解javascript的面向对象特性
- javascript面向对象:继承、多态
- python 面向对象三大特性(封装 多态 继承)
- 面向对象的 Javascript 语言特性:作用域
- JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性
- prototype.js 让你更深入的了解javascript的面向对象特性
- JavaScript面向对象特性的运用(2010072917)
- prototype.js 深入学习 javascript 的面向对象特性
- 面向对象的三大特性:封装、继承、多态
- Java学习第六课--面向对象的三大特性(封装、继承和多态)
- JavaScript的相关继承笔记以及使用外部库实现JavaScript的面向对象特性
- 4月28日 面向对象三大特性之多态
- 黑马程序员——OC语言学习——OC面向对象的三大特性:封装、继承、多态,OC字符串——NSString
- javascript 的面向对象特性参考
- JS面向对象三:js的多态特性解析与代码实现
- java语言基础(23)——面向对象三大特性(封装、继承、多态)
- 面向对象的三大特性(封装 继承 多态)
- 牛客网Java刷题知识点之面向对象java的四大特性(抽象、封装、继承、多态)