Плюсы:
- удобный красивый код
Минусы:
- код плохо оптимизирован (лучше использовать прототипы)
* представьте, что вам придется создать 1000 объектов Animal, и каждый из них продублирует создание КАЖДОГО свойства (то есть некоторые методы и свойства будут создаваться 1000 раз!)
* зачем нужен метод animal.getFood, если он возвращает PUBLIC переменную?
* лишняя самовызывающаяся функция (рядом с комментарием constructor); помните, что функция - это объект в Javascript, и вы создаете лишний объект, без которого вполне можно обойтись
* Animal.voice по идее - статичный метод, и его нужно убрать за пределы конструктора объекта, а не инициализировать при каждом создании объекта Animal
СЕРЬЕЗНАЯ ОШИБКА:
- дополните ваш код следующим:
var horse2 = new Horse();
horse2.getFood();
По идее должна создасться еще одна лошадь с переопределенным методом getFood, но после того как вы создали первую лошадь и указали
Horse = Animal; все ваши последующие объекты Horse становятся простыми Animal. Вобщем, никакого наследования на самом деле не получится тут.
Что делать? Использовать прототипы. Очень тяжело для того, кто привык работать с другими языками программирования типа Java, C++, но лучше потратить несколько дней на понимание прототипов.