Наследование Javascript; вызов и прототип

Чтобы реализовать наследование в Javascript, обычно делают следующие 2 шага;

Скажите, у меня есть базовый класс "Животное"

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

Теперь я хочу вывести подкласс "Собака" из того же. Так что я бы сказал,

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

Поэтому я вызываю конструктор родительского класса из моего конструктора производного класса. 2-й шаг - установить прототип следующим образом;

Dog.prototype = new Animal();

Теперь я могу получить доступ к любым свойствам базового класса «Животное» из моего производного класса Dog.

Итак, мой вопрос: зачем нужны эти 2 шага? Если мы просто вызываем конструктор базового класса, используя

Animal.call(this,name);

Разве этого недостаточно для реализации Наследования?

Почему мытакже необходимо установить свойство прототипа, используяDog.prototype = new Animal(); ?

Я хотел понять, что делает каждый из вышеперечисленных 2 шагов?

Ответы на вопрос(6)

Ваш ответ на вопрос