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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值