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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章