Base.js --継承の実装 ========================== [注]: 継承後、親クラスがclass の場合、そのプロパティ、メソッド (プロトタイプで宣言されたものを含む)、および静的メソッドが継承されます。それ以外の場合は、プロパティとメソッドのみが継承されます。 コードをコピー コードは次のとおりです。 Object.prototype.extendf= function (a ,b) { if(!a||!b) return; var fa = typeof a=="function"; var fb = typeof b=="function"; cha = function (a,b){ for(var c in b){ if(a[c]==unknown)//サブクラス書き換え a[c]=b[c]; } return a; // 継承されたオブジェクトを返します } if(fa&&fb){ b.apply(this,a.arguments); cha(a,b) ); this["base"] =new b;//base を通じて親クラスにアクセスします return cha(this,b.prototype); else if(!fa&&fb){ cha(a,new b); a["base"]= new b; return cha(a,b); cha (a,b); this["base"]=b; return cha(this,b) }else if(!fa&&!fb){ a["base " ]=b; return cha(a,b); } } テストページ: 使用法 コードをコピー コードは次のとおりです: <br><script; type="text/javascript"> <br>var car2 = { <br>name: "Car [親カテゴリ]", <br>price: "数万 [親カテゴリ]", <br>start : function ( ){ <br>alert(this.name " 2 を開始しました! [親クラス]"); <br>}, <br>run : function(){ <br>alert(this.name " 実行中 2. . . [親クラス]"); <br>}, <br>stop: function(){ <br>alert(this.name "Stopped 2! [親クラス]"); <br>}, <br>備考: function(){return "[親クラス] 2 私は車です" this.name " ; value" this.price;} <br>// this.remark = "私は車です" this.name " ;値of "this.price; <br>} <br>//car2.prototype.extra = function(ext){ <br>// return this.name "料金表 2 は次のとおりです: " ext; <br>// } <br>car2.protect = "[親クラス] 2 保護されています"; <br>car2.noExtra = function(){ <br>return car.protect "関税なし 2 [親クラス]"; >var car = function(name,price){ <br>this.name=name||"Car [親クラス]" <br>this.price=price||"数万 [親クラス]" ; 🎜>this.start = function(){ <br>alert(this.name " 開始しました! [親クラス]"); <br>this.run = function(){ <br> alter(this .name " 運転中... [親クラス]"); <br>this.stop= function(){ <br>alert(this.name " 停止しました! [親クラス] ]"); 🎜>}; <br>this.remark = function(){return "[親クラス] 私は "this.name"; value" this.price;}; <br>// this .remark = "私はa car" this.name ";value" this.price; //これを行うと、名前と価格は渡されたパラメータを取得できないので、コメント <br>} <br>car.prototype.extra = function( ext){ <br>return this.name "料金表は [親クラス]:" ext; <br>car.protect = "[親クラス] 保護されています"; noExtra = function( ){ <br>return car.protect "関税なし [親クラス]"; <br>} <br>var BMW = function(){ <br>this.extendf(BMW,car); name = "BMW [サブクラス]"; <br>this.start=function(){ <br>alert(this.name "専用の始動デバイス! "); <br>}; <br>return ("this.name1=" this.name); <br>} <br>var BMW2 = function(){ <br>this.extendf(BMW2,car2); <br>this.name = "BMW Ultimate No.2 [サブカテゴリー]"; <br>this.start=function(){ <br>alert(this.name "専用始動装置 No.2 Future!"); 🎜 >}; <br>return ("this.name1=" this.name); <br>} <br>var bensi = { <br>名前:"bensi", <br>価格:"130 万", <br>start:function(){ <br>alert(this.name " ゴージャスなスタート!"); <br>}, <br>stop:function(){ <br>alert(this.name " 特別なブレーキやめて! "); <br>} <br>} <br>bensi.noExtra=function(){ <br>return "誰があえて税金を徴収するでしょうか? "; <br>} <br>var autuo = { <br>name:"autuo【サブカテゴリ】", <br>price: "10,000", <br>stop:function(){ <br>alert( this. name "アルトは活動停止中です!"); <br>} <br>} <br>function ChangAn(){ <br>this.extendf(ChangAn,car); <br>// this.name = "CHANGAN [サブクラス]"; <br>this.run=function(){ <br>alert(this.name " 少し遅くなっています..."); <br>} <br>} <br>var ftest = function (){ <br>var tb = new BMW("BMW","700,000"); <br>alert(BMW.noExtra()); = function(){ <br>var tb = bensi//("ベンツ","120万"); <br>tb.extendf(bensi,car); <br>testRun(bensi); bensi.noExtra()); <br>} <br>var ftest3 = function(){ <br>var tb = new ChangAn("長安[パスパラメータ]","50,000"); tb); <br>alert(ChangAn.noExtra()); <br> var ftest4 = function(){ <br>var tb = autuo <br>tb.extendf(autuo,car2); >testRun(tb); <br>alert(autuo.noExtra()); <br>} <br>var tb = autuo <br>tb.extendf(autuo,bensi ) ; <br>alert(tb.name); <br>tb.stop(); <br>alert(autuo.noExtra()); = function(){ <br>var tb = 新型 BMW2("BMW 2","650,000"); <br>var rar = document.getElementById("showcar"); <br>scar.innerHTML = tb .remark( ); <br>alert(tb.name); <br>tb.stop(); <br>alert(BMW2.noExtra()); /テスト出力<br>function testRun(tb){ <br>var rar = document.getElementById("showcar"); <br>if(!scar) return false; <br>scar.innerHTML = tb. ; <br>tb.base.start(); <br>tb.base.run(); ); <br>tb.stop(); <br>alert(tb.extra("10,000")); //親クラス自体に <br> がないため、これは失敗します。 <br> <入力タイプ = "ボタン" 値 = "メルセデス・ベンツ" onclick = "ftest2()" > ;< /div> 追記: パフォーマンスの問題は見当たりませんでした。改善していただきたいと思います。パラメータを 1 つだけ使用したいのですが、方法はありますか? ネストされたクラス まだ試していません。