Преимущества prototypal наследования по классическому?

Таким образом, я наконец прекратил волочить ноги все эти годы и решил изучить JavaScript "правильно". Один из большинства царапающих голову элементов дизайна языков, это - реализация наследования. Имея опыт в Ruby, я был действительно рад видеть закрытия и динамический контроль типов; но ни за что в жизни не может выяснить, какими преимуществами нужно обладать от экземпляров объектов с помощью других экземпляров для наследования.

264
задан HerbalMart 26 August 2014 в 02:14
поделиться

3 ответа

Разрешите мне ответить на вопрос прямо в тексте.

Наследование прототипов имеет следующие достоинства:

  1. Оно лучше подходит для динамических языков, потому что наследование столь же динамично, как и среда, в которой оно находится. (Применимость к JavaScript здесь должна быть очевидна.) Это позволяет вам что-то делать. быстро на лету, как настройка классов без огромного количества кода инфраструктуры.
  2. Проще реализовать схему объекта прототипирования, чем классические схемы дихотомии класса / объекта.
  3. Это устраняет необходимость в сложных острых краях вокруг модели объекта, таких как «метаклассы» (мне никогда не нравился метакласс… извините!) Или «собственные значения» или тому подобное.

Однако он имеет следующие недостатки:

  1. Проверка типа языка-прототипа не невозможна, но очень, очень сложна. Большинство «типовых проверок» прототипных языков - это чистые проверки в стиле «утиная типизация» во время выполнения. Это не подходит для всех сред.
  2. Точно так же сложно делать такие вещи, как оптимизация диспетчеризации методов с помощью статического (или, часто, даже динамического!) Анализа. Это может (я подчеркиваю: может ) очень легко быть очень неэффективным.
  3. Точно так же создание объекта может (и обычно происходит) намного медленнее на языке прототипирования, чем в более традиционной схеме дихотомии класса / объекта.

Я думаю, вы можете прочитать между строк выше и придумать соответствующие преимущества и недостатки традиционных схем класса / объекта. Конечно, в каждой области их больше, поэтому я оставлю все остальное на усмотрение других людей.

39
ответ дан 23 November 2019 в 02:28
поделиться

Веб-разработка: прототипное наследование против классического наследования

http://chamnapchhorn.blogspot.com/2009/05/prototypal-inheritance-vs-classical.html

Классическое и прототипное наследование - переполнение стека

Классическое и прототипное наследование

2
ответ дан 23 November 2019 в 02:28
поделиться

IMO главным преимуществом прототипического наследования является его простота.

Прототипическая природа языка может сбить с толку людей, которые классически обучены, но оказывается, что на самом деле это действительно простая и мощная концепция, дифференциальное наследование.

Вам не нужно делать классификацию, ваш код меньше, меньше избыточности, объекты наследуют от других, более общих объектов.

Если вы мыслите прототипически, вы скоро заметите, что вам не нужны классы...

Прототипическое наследование будет гораздо более популярным в ближайшем будущем, спецификация ECMAScript 5th Edition ввела метод Object.create , который позволяет вам создавать новый экземпляр объекта, который наследуется от другого очень простым способом:

var obj = Object.create(baseInstance);

Эта новая версия стандарта внедряется всеми производителями браузеров, и я думаю, что мы начнем видеть больше чистого прототипического наследования....

28
ответ дан 23 November 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: