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面向对象的多态特性(2009-05-07 22:47),现转于此!

posted @ 2012-05-21 17:58  Charles-Lee  Views(1210)  Comments(0Edit  收藏  举报