Для чего нужно выносить переменную класса на глобальный уровень?
Что бы в области видимости была ссылка на конструктор (что бы не засорять область видимости) - модульный подход.
Почему необходимо такое присвоение Wolf.prototype.constructor = Wolf;
Стефан Стоянов в своей книге “JavaScript шаблоны”, описывает данный способ “Классического наследования (ООП)”. Это еще один подход к разработке. Подробнее можно прочитать в выше приведенной книге в главе 6 “Шаблоны повторного использования программного кода” - “Классический шаблон №3: заимствование и установка прототипа”.
ссылка на книгу: JavaScript. Шаблоны
Думаю что автор сделал так чтобы мочь использовать класс Slider из других js файлов страницы. Считай, вынес переменную на глобальный уровень.
Задачу использования класса в одном модуле из другого решуют с помощью commonjs модулей и системы сборки (webpack, browserify и другие). Автор мог не воспользоваться потому что поленился настраивать сборку проекта или потому что не знал что так можно. В случае с модулями использование Slider из модуля выглядело бы так:
// slider.js
function Slider() {}
exports.Slider = Slider
// index.js
var Slider = require('./slider.js')
В коде автор хотел наследовать класс Wolf от класса Animal (т.е. сделать так чтобы все методы и свойства Animal были доступны в Wolf. Так как до es5 не было стандартного синтаксиса создания классов и наследования, автор выбрал один из вариантов наследования, побочным эффектом которого есть нарушение цепочки прототипов (подробнее про механизмы наследования можно глянуть тут: Прототипное наследование). Строка Wolf.prototype.constructor = Wolf; восстанавливает цепочку прототипов.