«Функциональный» стиль (большинство людей называют это «традиционным ООП»):
- Преимущество: ООП, которое работает так, как все (или, по крайней мере, Java-программисты) знакомы, включая «по-настоящему» частные методы и переменные
- Недостаток: Javascript не был разработан для этого типа ООП, поэтому вам придется прыгать через множество обручей, чтобы заставить его работать. Эти циклы усложняют отладку, а также повышают производительность (хотя точная стоимость будет зависеть от того, насколько / насколько вы их используете)
Стиль прототипа:
- Преимущество: Это ООП в соответствии с тем, для чего был разработан Javascript.
- Недостаток: Это не то, к чему вы привыкли (если только у вас нет опыта работы с другими языками наследования прототипов)
Так что, если производительность не является большой проблемой для вас, и вы знакомы только с традиционным ООП ... сделайте это (шаблоны проектирования Javascript от APress имеют хороший шаблон для этого). Но если производительность имеет значение или вас беспокоит дополнительный уровень абстракции, усложняющий вашу отладку, найдите время, чтобы узнать, как работает наследование прототипа; Вы будете лучшим программистом Javascript для этого.
P.S. Если вас беспокоит отсутствие настоящих «приватных» методов со стилем прототипа, я настоятельно рекомендую прочитать:
http://snook.ca/archives/javascript/no-love-for-module-pattern
Он дает отличное объяснение того, почему настоящие «частные» члены на самом деле плохи (по крайней мере, в большинстве сред разработки JS).