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解释执行的特性,因此可以再基类中调用将要在派生类中定义的方法,那么这个基类方法就相当于虚方法,可以实现模拟多态!

发布了34 篇原创文章 · 获赞 1 · 访问量 15万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章