Каковы технические преимущества псевдоклассического наследования по сравнению с функциональным наследованием (фабричные функции)? - PullRequest
0 голосов
/ 20 сентября 2018

Альтернативное название: «Почему так много популярных библиотек JavaScript используют псевдоклассическое наследование, а не функциональное наследование (фабричные функции)?»

JavaScript: Хорошие детали рекомендует использовать фабрикуфункции, так что вы получите истинную конфиденциальность методов и свойств.Это имеет смысл, поэтому мне интересно, почему так много современных библиотек JS все еще используют псевдоклассическое наследование (используя ключевое слово new).Есть ли какое-то техническое преимущество в этом пути по сравнению с заводскими функциями?Если нет, то это просто стилистический выбор?

РЕДАКТИРОВАТЬ: Это не пост, основанный на мнении.Я не спрашиваю, что лучше, я спрашиваю, какие технические преимущества имеет псевдоклассическое наследование по сравнению с функционалом, чтобы понять, почему кто-то выбрал бы этот стиль.

  1. Когда вы console.log экземпляр прототипа, он показывает вам имя объекта, из которого он был создан.
  2. В связанной заметке вы можете использовать instanceofчтобы увидеть, произошел ли экземпляр от конкретного объекта, что невозможно при использовании фабричных функций.

1 Ответ

0 голосов
/ 20 сентября 2018

Давайте сосредоточимся на вашем примере.Я не думаю, что фабричные функции требуются, хотя они могут быть предпочтительнее по той причине, которую вы указали.Например, вы можете получить информацию, скрывающуюся вместе с новой, используя шаблон раскрывающегося модуля.

Вот ссылка на разумное объяснение этого шаблона.http://jargon.js.org/_glossary/REVEALING_MODULE_PATTERN.md

Я думаю, что на самом деле это просто предпочтение одного шаблона другому, в этом случае выявление шаблона по сравнению с фабрикой.Вполне вероятно, что информация людей разрознена, и разные теории доминируют в разных местах.Вы только улавливаете часть дебатов и задаетесь вопросом, почему все не делают X над Y, они в основном пытаются удовлетворить аналогичные проблемы.

Вы найдете много избегания новых в статически типизированных языках, где зависимости становятся более серьезными из-за строгой типизации.Вы также получите разные ответы от функционального программиста, от процедурного программирования до ООП.Я думаю, что один интересный аспект javascript - это то, что он привносит в него людей из всех типов языков.

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

...