Переход от 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 как обязательной зависимости. В 2.x библиотека фактически расширяла возможности jQuery и не могла использоваться в чистом JavaScript без дополнительного слоя.
В 4.x библиотека становится независимым ES-модулем. Это даёт несколько системных изменений:
В результате AutoNumeric 4.x легко интегрируется в React, Vue, Angular и другие фреймворки без промежуточных адаптеров.
В 2.x конфигурация опиралась на набор параметров, унаследованных от эпохи jQuery-плагинов. Названия опций часто были ориентированы на snake_case или смешанный стиль, например:
aSepaDecvMaxvMinТакая модель была компактной, но не всегда интуитивной.
В 4.x произошла нормализация конфигурации в сторону более читаемых и семантически ясных ключей:
digitGroupSeparatordecimalCharactermaximumValueminimumValueПереход к полным именам повышает читаемость кода и уменьшает вероятность ошибок при настройке. Также конфигурация стала более структурированной: логически связанные параметры сгруппированы по смыслу.
В 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);
Это обеспечивает:
Версия 2.x распространялась как монолитный файл, часто подключаемый
через <script>:
<script src="autoNumeric.js"></script>
В 4.x реализована полноценная модульная структура ES:
import AutoNumeric from 'autonumeric';
Это изменение критично для современных сборочных систем. Появляется возможность:
В 2.x форматирование чисел было тесно связано с внутренними алгоритмами, которые не всегда позволяли гибко управлять отображением:
В 4.x алгоритмы форматирования стали более параметризуемыми. Появилась возможность точной настройки:
При этом логика форматирования отделена от хранения значения, что делает систему более предсказуемой.
В 2.x работа с несколькими полями происходила через jQuery коллекции:
$('.price').autoNumeric('init');
Каждый элемент коллекции обрабатывался через скрытую внутреннюю итерацию.
В 4.x управление становится явным:
const instances = elements.map(el => new AutoNumeric(el, options));
Это даёт прямой контроль над каждым экземпляром, что особенно важно в сложных интерфейсах, где требуется синхронизация или каскадные вычисления.
Некоторые методы были переименованы или переработаны для повышения ясности:
getString уступил место более определённым методам
получения числового значенияset стал универсальным способом установки значения без
строковых перегрузокunformat больше не является центральной операцией, так
как форматирование отделено от храненияAPI стало менее перегруженным, но более строгим по типам и поведению.
В 2.x уничтожение плагина происходило через строковую команду:
$(selector).autoNumeric('destroy');
В 4.x это явный метод экземпляра:
anElement.remove();
При этом происходит полная очистка состояния, удаление обработчиков событий и восстановление исходного состояния DOM-элемента.
AutoNumeric 4.x демонстрирует заметные улучшения производительности по сравнению с 2.x благодаря нескольким факторам:
Особенно заметно снижение overhead при массовой инициализации полей ввода.
Переход между версиями требует переработки кода, так как изменения затрагивают фундаментальные аспекты:
При этом логика работы с числами остаётся концептуально схожей: библиотека по-прежнему решает задачу форматирования и нормализации числового ввода, но делает это через более современную архитектуру.