Отличия версий 2.x и 4.x

Переход от AutoNumeric 2.x к 4.x представляет собой не просто обновление API, а полную смену архитектурной модели библиотеки. Версия 2.x исторически базировалась на jQuery-плагине, тесно интегрированном с DOM через механизм расширения $.fn. Такой подход обеспечивал простоту подключения в эпоху доминирования jQuery, но создавал жёсткую зависимость от экосистемы и ограничивал гибкость использования в современных сборщиках модулей.

Версия 4.x полностью отказывается от зависимости от jQuery и реализует самостоятельный классовый подход. Основной сущностью становится экземпляр класса AutoNumeric, создаваемый напрямую через new AutoNumeric(...). Это изменение затрагивает всю модель взаимодействия: вместо декларативного вызова через jQuery-обёртку используется объектно-ориентированная работа с экземплярами.

Инициализация и создание экземпляров

В 2.x инициализация выглядела как вызов метода jQuery-плагина:

$(selector).autoNumeric('init', options);

или более ранние формы:

$(selector).autoNumeric(options);

Подход предполагал глобальную регистрацию плагина и работу через цепочки jQuery-методов. Конфигурация передавалась как объект, но управление жизненным циклом оставалось внутри jQuery-обёртки.

В 4.x инициализация полностью перепроектирована:

const anElement = new AutoNumeric(element, options);

Здесь element может быть DOM-узлом или селектором, а результатом становится экземпляр, управляющий конкретным полем ввода. Такой подход делает поведение более предсказуемым: каждый экземпляр изолирован, отсутствует глобальное состояние плагина.

Отказ от jQuery и влияние на экосистему

Одним из ключевых отличий является полное исключение jQuery как обязательной зависимости. В 2.x библиотека фактически расширяла возможности jQuery и не могла использоваться в чистом JavaScript без дополнительного слоя.

В 4.x библиотека становится независимым ES-модулем. Это даёт несколько системных изменений:

  • возможность использования в современных сборщиках (Webpack, Vite, Rollup)
  • поддержка tree-shaking
  • отсутствие глобальных переменных
  • совместимость с native DOM API

В результате AutoNumeric 4.x легко интегрируется в React, Vue, Angular и другие фреймворки без промежуточных адаптеров.

Изменение модели конфигурации

В 2.x конфигурация опиралась на набор параметров, унаследованных от эпохи jQuery-плагинов. Названия опций часто были ориентированы на snake_case или смешанный стиль, например:

  • aSep
  • aDec
  • vMax
  • vMin

Такая модель была компактной, но не всегда интуитивной.

В 4.x произошла нормализация конфигурации в сторону более читаемых и семантически ясных ключей:

  • digitGroupSeparator
  • decimalCharacter
  • maximumValue
  • minimumValue

Переход к полным именам повышает читаемость кода и уменьшает вероятность ошибок при настройке. Также конфигурация стала более структурированной: логически связанные параметры сгруппированы по смыслу.

Работа с экземпляром и жизненный цикл

В 2.x управление жизненным циклом осуществлялось через вызовы плагина:

$(selector).autoNumeric('destroy');
$(selector).autoNumeric('set', value);
$(selector).autoNumeric('get');

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

В 4.x управление стало строго методным:

anElement.set(value);
anElement.getNumber();
anElement.remove();

Каждый экземпляр имеет собственный набор методов, что делает API более предсказуемым и совместимым с современными практиками ООП в JavaScript.

Обработка числовых значений

Одним из ключевых улучшений 4.x является более строгая работа с числовыми типами.

В 2.x часто использовались строковые представления чисел, а преобразование происходило внутри библиотеки без явного контроля:

  • значение могло возвращаться как строка
  • форматирование и парсинг были тесно связаны
  • возможны неочевидные преобразования при локалях

В 4.x разделение стало более явным:

  • getNumber() возвращает числовое значение (number)
  • форматированное значение отделено от внутреннего представления
  • парсинг выполняется предсказуемо и конфигурируемо

Такой подход уменьшает количество ошибок при вычислениях и интеграции с бизнес-логикой.

Событийная модель

В 2.x события были привязаны к jQuery-системе событий:

$(selector).on('change', handler);

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

В 4.x события интегрированы в DOM EventTarget модель. Экземпляры могут генерировать события, которые подписываются стандартным способом:

element.addEventListener('autoNumeric:change', handler);

Это обеспечивает:

  • отсутствие зависимости от jQuery events
  • единообразие с браузерной моделью событий
  • лучшую интеграцию с фреймворками

Поддержка модульной структуры

Версия 2.x распространялась как монолитный файл, часто подключаемый через <script>:

<script src="autoNumeric.js"></script>

В 4.x реализована полноценная модульная структура ES:

import AutoNumeric from 'autonumeric';

Это изменение критично для современных сборочных систем. Появляется возможность:

  • импортировать только нужные части
  • использовать динамические импорты
  • уменьшать итоговый bundle

Поведение при форматировании

В 2.x форматирование чисел было тесно связано с внутренними алгоритмами, которые не всегда позволяли гибко управлять отображением:

  • фиксированные правила группировки разрядов
  • ограниченная кастомизация локалей
  • сложность переопределения поведения без форков

В 4.x алгоритмы форматирования стали более параметризуемыми. Появилась возможность точной настройки:

  • разделителей групп
  • поведения десятичной точки
  • правил округления
  • отображения отрицательных значений

При этом логика форматирования отделена от хранения значения, что делает систему более предсказуемой.

Управление несколькими экземплярами

В 2.x работа с несколькими полями происходила через jQuery коллекции:

$('.price').autoNumeric('init');

Каждый элемент коллекции обрабатывался через скрытую внутреннюю итерацию.

В 4.x управление становится явным:

const instances = elements.map(el => new AutoNumeric(el, options));

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

Изменения в API методов

Некоторые методы были переименованы или переработаны для повышения ясности:

  • getString уступил место более определённым методам получения числового значения
  • set стал универсальным способом установки значения без строковых перегрузок
  • unformat больше не является центральной операцией, так как форматирование отделено от хранения

API стало менее перегруженным, но более строгим по типам и поведению.

Обработка уничтожения экземпляра

В 2.x уничтожение плагина происходило через строковую команду:

$(selector).autoNumeric('destroy');

В 4.x это явный метод экземпляра:

anElement.remove();

При этом происходит полная очистка состояния, удаление обработчиков событий и восстановление исходного состояния DOM-элемента.

Производительность и оптимизация

AutoNumeric 4.x демонстрирует заметные улучшения производительности по сравнению с 2.x благодаря нескольким факторам:

  • отсутствие jQuery-обёртки
  • уменьшение количества промежуточных вызовов функций
  • оптимизация парсинга и форматирования
  • возможность частичной загрузки модулей

Особенно заметно снижение overhead при массовой инициализации полей ввода.

Совместимость и миграционные различия

Переход между версиями требует переработки кода, так как изменения затрагивают фундаментальные аспекты:

  • отказ от строкового API
  • переход на классовую модель
  • изменение структуры конфигурации
  • новая событийная система

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