模拟Javascript面向对象的多态特性
2016-12-12 14:26
501 查看
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基础--面向对象三大特性(八):继承封装多态
- javascript 的面向对象特性参考
- prototype.js 让你更深入的了解javascript的面向对象特性
- javascript 的面向对象特性参考
- prototype.js 让你更深入的了解javascript的面向对象特性
- prototype.js 让你更深入的了解javascript的面向对象特性
- javascript 的面向对象特性参考
- 面向对象的 Javascript 语言特性:作用域
- 面向对象的 Javascript 语言特性:引用
- 面向对象的 javascript的几个最重要的特性的讲解和实例以及全套javascript的例子.doc
- prototype.js 深入学习 javascript 的面向对象特性
- 面向对象的 Javascript 语言特性:作用域
- 面向对象的 Javascript 语言特性:引用
- 面向对象的 Javascript 语言特性:闭包
- javascript 的面向对象特性参考
- 关于javascript面向对象特性的读书笔记
- prototype.js 让你更深入的了解javascript的面向对象特性 http://www.cnblogs.com/meil/archive/2007/05/09/740043.html
- Javascript面向对象详解(第一部分,后面的高级特性陆续跟进中,敬请关注)
- 关于javascript中面向对象的特性和实现