Таким образом, я наконец прекратил волочить ноги все эти годы и решил изучить JavaScript "правильно". Один из большинства царапающих голову элементов дизайна языков, это - реализация наследования. Имея опыт в Ruby, я был действительно рад видеть закрытия и динамический контроль типов; но ни за что в жизни не может выяснить, какими преимуществами нужно обладать от экземпляров объектов с помощью других экземпляров для наследования.
Разрешите мне ответить на вопрос прямо в тексте.
Наследование прототипов имеет следующие достоинства:
Однако он имеет следующие недостатки:
Я думаю, вы можете прочитать между строк выше и придумать соответствующие преимущества и недостатки традиционных схем класса / объекта. Конечно, в каждой области их больше, поэтому я оставлю все остальное на усмотрение других людей.
Веб-разработка: прототипное наследование против классического наследования
http://chamnapchhorn.blogspot.com/2009/05/prototypal-inheritance-vs-classical.html
Классическое и прототипное наследование - переполнение стека
IMO главным преимуществом прототипического наследования является его простота.
Прототипическая природа языка может сбить с толку людей, которые классически обучены, но оказывается, что на самом деле это действительно простая и мощная концепция, дифференциальное наследование.
Вам не нужно делать классификацию, ваш код меньше, меньше избыточности, объекты наследуют от других, более общих объектов.
Если вы мыслите прототипически, вы скоро заметите, что вам не нужны классы...
Прототипическое наследование будет гораздо более популярным в ближайшем будущем, спецификация ECMAScript 5th Edition ввела метод Object.create
, который позволяет вам создавать новый экземпляр объекта, который наследуется от другого очень простым способом:
var obj = Object.create(baseInstance);
Эта новая версия стандарта внедряется всеми производителями браузеров, и я думаю, что мы начнем видеть больше чистого прототипического наследования....