4

以下は私のJavaScriptコードです

function extend(Child, Parent) {

    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
}
function BController (){
} 
function AController (){
    BController.call(this);
} 

AController.prototype.dosomething=function(){
} 

私が電話したら

 var g=new AController();
 g.dosomething ();

すべて順調。しかし、私が呼び出すと(AContronllerがBControllerを継承することを願っています)

 extend(AController,BController);
 var g=new AController();
 g.dosomething ();

それは常に報告します

g.dosomething is not a function

方法 2: Acontroller を次のように変更した場合

function AController ( ){
   this.dosomethingNew=function(){

   }
} 

そして電話する

 extend(AController,BController);
 var g=new AController();
 g.dosomethingNew ();

大丈夫だよ。

あなたのコメント歓迎

4

1 に答える 1

2

拡張するための呼び出しを間違った場所に配置しました。extend が呼び出された時点で、AController のプロトタイプ全体が上書きdosomethingされ、その過程で失われます。

代わりに、AController に固有のものをすべて追加する前に、extend を呼び出す必要があります。

したがって、次のようになります。

function BController ( ){  
} // <--- no semicolon after function declarations

function AController (){
   BController.call(this);
} // <---- remove here too

extend(AController, BController);  //  <---- HERE
//Now AController's prototype is a new object whose prototype 
//is BController's prototype, thereby inheriting everything from 
//BController.  Now you may add specific stuff to AController 

AController.prototype.dosomething = function(){

};

これが機能するデモです

于 2013-08-10T17:57:17.273 に答える