Я играю с наследованием класса Mootools и т. Д., И я пытаюсь вызвать переопределенные методы базовых классов с помощью свойства .parent (sry для длинного фрагмента кода).Класс Mootools расширяет вызывающий переопределенный родительский метод
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() не затем вызвать маргаритки родительского класса DoStuff () метод, на который я надеялся. Не могли бы вы рассказать мне, как я бы назвал doStuff?
UPDATE:
мне удалось зафиксировать его называют последовательность по replacnig this.doStuff.parent() с this.parent(). Однако это поставило вопрос о том, что «это» повторяет. Я думал, что это будет фактический экземпляр класса ie. daisy или godzilla, но использование this.parent() в методе doStuff, по-видимому, подразумевает, по крайней мере, для меня, что «это» относится к фактическому объекту Function, в котором он находится внутри, за исключением вызова метода parent() внутри функции автоматически ищет способ, в котором вы находитесь, и вызывает его первый переопределенный метод.
это относится к экземпляру - объекту, являющемуся объектом хоста используемого вами метода. –