Herança de Javascript; chamada e protótipo
Para implementar a herança em JavaScript, geralmente as duas etapas a seguir são realizadas;
Digamos que eu tenha uma classe base "Animal"
var Animal = function(name){
this.name = name;
}
Agora eu quero derivar uma sub-classe "Dog" do mesmo. Então eu diria
var Dog = function(name) {
Animal.call(this,name);
}
Então, estou chamando meu construtor de classe pai do meu construtor de classe derivada. O segundo passo é definir o protótipo da seguinte maneira;
Dog.prototype = new Animal();
Agora posso acessar qualquer uma das propriedades de classe "Animal" de base de dentro da minha classe derivada Dog.
Então, minha pergunta é por que essas duas etapas são necessárias? Se apenas chamarmos o construtor da classe base usando
Animal.call(this,name);
isso não é suficiente para implementar Herança?
Por que nósAlém disso precisa definir a propriedade protótipo usandoDog.prototype = new Animal();
?
Eu queria entender o que cada um dos dois passos acima faz?