javascript的多根繼承和多層繼承
上篇文章貼出后又想了兩個問題:
仔細一想,多層繼承上篇文章的代碼已經實現。多根繼承則需要進一步完善extend方法。于是有了下面的代碼,使用方法很簡單。只要一句話可以輕松實現對多個父類的繼承。下面是詳細的示例源代碼。歡迎交流,QQ:27234687 。讀者可以自行修改后點【測試】按鈕查看輸出結果。 /** 多根繼承方法, 參數可以支持多個父類參數 子類將按順序繼承所有父類的方法, 如果父類中有重復的方法則繼承父類列表中在后面的類 父類的方法通過this.superClass.method()調用,可以調用所有父類方法 */ Object.prototype.extend = function(){ this.superClass={} for(var i=0;i<arguments.length;i++){ this.SuperClass=arguments[i]; this.SuperClass(); this.superClass.SuperClass=arguments[i]; this.superClass.SuperClass() } } //聲明父類1:第一個方法show將得到繼承,第二個方法將被覆蓋 function SuperClass1(){ this.show=function(){ alert('Call SuperClass1.show()'); } this.override=function(){ alert('Call SuperClass1.override()'); } } //聲明父類2:子類將繼承speak方法 function SuperClass2(){ this.speak=function(){ alert('Call SuperClass2.speak()'); } } //聲明子類:繼承父類1和父類2,同時覆蓋了父類1的方法override function SubClass(){ //調用繼承方法繼承父類的屬性和方法 this.extend(SuperClass1,SuperClass2); this.override=function(){ alert("Call SubClass.override()。I will call my superClass's method SuperClass1.override()"); this.superClass.override(); } this.sing=function(){ alert('Call SubClass.sing()'); } } //子類的子類,多層繼承展示:將通過繼承SubClass得到SuperClass1和SuperClass2的方法以及SubClass的方法 function SubSubClass(){ this.extend(SubClass); this.talk=function(){ alert('call SubSubClass.talk()'); } } //測試子類的繼承的結果: var s=new SubClass(); s.show(); //將調用SuperClass1的方法 s.speak(); //將調用SuperClass2的方法 s.override();//將調用SubClass的方法 s.sing();//將調用SubClass的sing方法 //測試孫類繼承的結果: var s=new SubSubClass(); s.show(); //將調用SuperClass1的方法 s.speak(); //將調用SuperClass2的方法 s.override();//將調用SubClass的方法 s.sing();//將調用SubClass的sing方法 s.talk();//將調用SubSubClass.talk方法 測試