Então você tem uma classe em javascript e quer que ela herde de outra classe, certo?
Você quer o seguinte
- para ser capaz de chamar o construtor da classe pai, bem como o filho
- você deseja que a classe filha herde todos os métodos da classe pai
- você deseja poder chamar super em métodos individuais na classe filha
Se sim, continue lendo …
função de utilidade simples para estender uma classe
function extend (base, constructor) {
var prototype = new Function();
prototype.prototype = base.prototype;
constructor.prototype = new prototype();
constructor.prototype.constructor = constructor;
}
Exemplo de classe pai neste caso Animal que tem um nome e faz barulho
// parent class
function Animal (name) {
this.animalName = name;
console.log("////== Animal Constructor ==/////");
console.log("An animal named " + name);
}
Animal.prototype.makeNoise = function (noise) {
console.log("////== Animal makeNoise() ==////");
console.log(noise + ", I can make noise...");
};
Ok, agora queremos fazer uma classe Dog que herde de Animal
function Dog (name) {
// call the super
Animal.call(this, name);
console.log("////== Dog Constructor ==/////");
console.log("I am a Dog named " + this.animalName);
}
// important that this happens before you override methods on parent class
extend(Animal, Dog);
Dog.prototype.makeNoise = function (noise) {
Animal.prototype.makeNoise.call(this, noise);
console.log("////== Dog makeNoise() ==////");
console.log("I am a Dog, I like to " + noise);
};
Portanto, agora temos um cão que também possui todos os métodos animais. Gostaríamos de usá-lo assim …
var dog = new Dog("Sparky");
dog.makeNoise("Bark!!");
E isso resultaria
"////== Animal Constructor ==/////"
"An animal named Sparky"
"////== Dog Constructor ==/////"
"I am a Dog named Sparky"
"////== Animal makeNoise() ==////"
"Bark!!, I can make noise..."
"////== Dog makeNoise() ==////"
"I am a Dog, I like to Bark!!"
Veja o exemplo de funcionamento
http://jsbin.com/zixohimo/1/edit?js,console