Herencia de Javascript; llamada y prototipo

Para implementar la herencia en Javascript, uno generalmente hace los siguientes 2 pasos;

Digamos que tengo una clase base "Animal"

var Animal = function(name){
this.name = name;
}

Ahora quiero derivar una subclase "Perro" de la misma. Asi que diria

var Dog = function(name) {
   Animal.call(this,name);
}

Así que estoy llamando a mi constructor de clases padre desde mi constructor de clases derivado. El segundo paso es configurar el prototipo de la siguiente manera;

Dog.prototype = new Animal();

Ahora puedo acceder a cualquiera de las propiedades de la clase "Animal" base desde dentro de mi clase derivada Perro.

Entonces mi pregunta es ¿por qué son estos 2 pasos necesarios? Si solo llamamos al constructor de la clase base usando

Animal.call(this,name);

¿No es eso suficiente para implementar la herencia?

Porque nosotrosademás necesidad de establecer la propiedad prototipo utilizandoDog.prototype = new Animal(); ?

Quería entender lo que hace cada uno de los 2 pasos anteriores?

Respuestas a la pregunta(6)

Su respuesta a la pregunta