我正在玩 Mootools 类继承等,我正在尝试使用 .parent 属性调用基类覆盖的方法(对于长代码片段)。
var app = this.app = {},
//ultimate base class
Animal = new Class({
initialize : function(param){
this.age = param.age;
this.name = param.name;
},
doStuff : function(param){
alert("animal doStuff");
}
}),
//herbivore functionality
HerbivoreBehaviour = new Class({
eat : function(){
alert('Plants are scrumptious');
}
}),
//carnivore functionality
CarnivoreBehaviour = new Class({
eat : function(){
alert('Meat tastes gooood');
}
})
//mammal base class
Mammal = new Class({
Extends : Animal,
initialize : function(param){
this.parent(param);
this.numberOfNipples = param.numberOfNipples;
},
doStuff : function(){
alert("mammal doStuff");
this.doStuff.parent();
}
}),
//reptile base class
Reptile = new Class({
Extends : Animal,
initialize : function(param){
this.parent(param);
this.numberOfScales = param.numberOfScales;
},
doStuff : function(){
alert('reptile doStuff');
this.doStuff.parent();
}
}),
//final top class animal->mammal-cow!
//and it's a herbivore
Cow = new Class({
Extends : Mammal,
Implements : HerbivoreBehaviour,
initialize : function(param){
this.parent(param);
this.isMooCrazy = param.isMooCrazy;
},
doStuff : function(){
alert('I am a cow');
this.doStuff.parent();
}
}),
//final top level class animal->reptile->mutantLizard!
//and it's a carnivore
MutantLizard = new Class({
Extends : Reptile,
Implements : CarnivoreBehaviour,
initialize : function(param){
this.parent(param);
this.isDestroyingEverything = param.isDestroyingEverything;
},
doStuff : function(){
alert('STOMP STOMP STOMP CRRRRRASH');
this.doStuff.parent();
}
});
app.run = function(){
var daisy = new Cow({
name : 'Daisy',
age : 2,
numberOfNipples : 6,
isMooCrazy : true
}),
godzilla = new MutantLizard({
name : 'Godzilla',
age : 1123,
numberOfScales : 123456,
isDestroyingEverthing : true
});
daisy.eat();
godzilla.eat();
daisy.doStuff();
godzilla.doStuff();
};
daisy.eat() 和 godzilla.eat() 的当前输出是正确的,但是在 daisy.doStuff() 的第一个打印语句之后执行停止,然后它不会调用 daisy 父类 doStuff() 方法,这就是我希望。你能告诉我我怎么会这样称呼 doStuff 吗?
更新:
我设法通过用 this.parent() 替换 this.doStuff.parent() 来修复他的调用顺序。然而,这引发了关于“this”指的是什么的问题。我认为这将是该类的实际实例,即。daisy 或 godzilla,但在 doStuff 方法中使用 this.parent() 似乎至少对我来说意味着“this”指的是它当前在其中的实际 Function 对象,除非调用 parent() 方法在函数内部会自动查找您所在的方法并调用它的第一个覆盖方法。