Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 4

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