Estenda Protótipos Javascript facilmente

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