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 回答