Polymorphism boleh dilaksanakan dengan cara yang serupa dengan pewarisan. Pertama tentukan kelas abstrak, yang memanggil beberapa kaedah maya tidak ditakrifkan dalam kelas abstrak, tetapi dilaksanakan melalui kelas pelaksanaan khusus.
Seperti dalam contoh berikut:
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"
Pertama, asas kelas asas abstrak ditakrifkan, dan kaedah oninit dipanggil dalam kaedah permulaan kelas asas, tetapi pelaksanaan atau pengisytiharan kaedah oninit tidak digunakan dalam kelas asas. Kelas SubClassA dan SubClassB mewarisi daripada kelas asas, dan melaksanakan kaedah oninit dengan cara yang berbeza.