Javascript: Шаблон модуля против шаблона конструктора / прототипа?

Я хотел бы знать, является ли шаблон модуля или шаблон Constructor / protoType более применимым к моей работе.

В основном я использую ненавязчивый JavaScript - в документе HTML есть ссылка на. JS файл.

Мое понимание шаблона модуля:

  • вызвать метод INIT (который в основном является публичным методом, который я могу создать и вернуть с помощью шаблона модуля)
  • В методе INIT назначьте все события щелчка и т. Д.

Это звучит как идеальный шаблон для моей ситуации, так как мне не нужно создавать объекты, иерархии наследования и т. Д.

Мое понимание шаблона Конструктор / Прототип:

  • для создания объектов
  • для использования наследования (т.е. е. Подтипы супертипа)

Правильно ли, что для предоставления ненавязчивого javascript шаблон модуля идеален?

Martin
9033 репутация

4 ответов


  • 66 рейтинг

    Конструктор-функции и прототипы являются одним из разумных способов реализации классов и экземпляров. Они не совсем соответствуют этой модели, поэтому обычно вам нужно выбрать конкретную схему или вспомогательный метод для реализации классов с точки зрения прототипов. ( Некоторые сведения о классах в JS . )

    Шаблон модуля обычно используется для пространства имен, где у вас будет один экземпляр, выступающий в качестве хранилища для группировки связанных функций и объектов. Это другой вариант использования, из которого хорошо подходит прототипирование. Они на самом деле не конкурируют друг с другом; вы можете с радостью использовать оба вместе (например, поместите конструктор-функцию внутри модуля и скажите new MyNamespace.MyModule.MyClass(arguments)).

    ответ дан bobince, с репутацией 433365, 24.09.2010
  • 11 рейтинг

    Шаблон модуля гораздо проще и элегантнее прототипа. Тем не менее, в первую очередь думаем о мобильном. Это не релевантный шаблон для средних / больших объектов, потому что инициализация должна проанализировать весь блок перед началом. Многократные замыкания также создают циклические зависимости, которые не освобождает сборщик мусора (особенно IE), это приводит к тому, что более тяжелый объем памяти не освобождается до тех пор, пока окно (или вкладка) не закрывается - проверьте диспетчер задач Chrome для сравнения. Время загрузки обратно пропорционально размеру объекта с использованием шаблона модуля, хотя это не относится к наследованию прототипа. Приведенные выше утверждения проверяются с помощью нескольких тестов, таких как этот: http: // jsperf. com / prototypal-performance / 54

    Как видно из последнего теста. Маленькие объекты лучше инициализировать как простые объекты (без этих шаблонов). Подходит для отдельных объектов, не требующих закрытия или наследования. Целесообразно оценить, нужны ли вам эти шаблоны.

    ответ дан Yann VR, с репутацией 356, 3.12.2012
  • 5 рейтинг

    Вы можете попробовать шаблон сворачивания, вот ссылка: Javascript Folding Pattern

    Я также оставил ответ на аналогичный вопрос, который показывает, как использовать шаблон сворачивания:

    Простой пример шаблона сворачивания

    ответ дан intrepidis, с репутацией 1900, 7.04.2013
  • 4 рейтинг

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

    ответ дан user1662008, с репутацией 156, 16.07.2014