多態的實作可以採用和繼承類似的方法。首先定義一個抽象類,其中呼叫一些虛方法,虛方法在抽象類別中沒用定義,而是透過其具體的實現類別來實現。
如下面的例子:
Object.extend=function(destination,source){ for(property in source){ destination[property]=source[property]; } return destination; } //定义一个抽象基类base,无构造函数 function base(){}; base.prototype={ initialize:function(){ this.oninit();//调用了一个虚方法 } } function SubClassA(){ //构造函数 } SubClassA.prototype=Object.extend({ propInSubClassA:"propInSubClassA", oninit:function(){ alert(this.propInSubClassA); } },base.prototype); function SubClassB(){ //构造函数 } SubClassB.prototype=Object.extend({ propInSubClassB:"propInSubClassB", oninit:function(){ alert(this.propInSubClassB); } },base.prototype); var objA=new SubClassA(); objA.initialize();//输出"propInSubClassA" var objB=new SubClassB(); objB.initialize();//输出"propInSubClassB"
先定義了一個抽象基底類別base,在base類別的initialize方法中呼叫了oninit方法,但是基底類別中並沒用oninit方法的實作或宣告。 SubClassA和SubClassB類繼承自base類,並且分別採用了不同的方式對oninit方法進行實作。