Polymorphismus kann auf ähnliche Weise wie Vererbung implementiert werden. Definieren Sie zunächst eine abstrakte Klasse, die einige virtuelle Methoden aufruft. Virtuelle Methoden werden nicht in der abstrakten Klasse definiert, sondern über ihre spezifische Implementierungsklasse implementiert.
Wie im folgenden Beispiel:
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"
Zuerst wird eine abstrakte Basisklassenbasis definiert und die Oninit-Methode in der Initialisierungsmethode der Basisklasse aufgerufen, die Implementierung oder Deklaration der Oninit-Methode wird jedoch nicht in der Basisklasse verwendet. Die Klassen SubClassA und SubClassB erben von der Basisklasse und implementieren die oninit-Methode auf unterschiedliche Weise.