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?

questionAnswers(6)

yourAnswerToTheQuestion