Библиотека Cash представляет собой облегчённую альтернативу jQuery, предоставляющую удобные методы для работы с DOM, событиями и анимациями. Основой её архитектуры является модульность и расширяемость, что позволяет создавать собственные плагины и расширения, сохраняя лёгкость и высокую производительность.
Cash строится вокруг функции cash(), которая возвращает
объект, подобный массиву, содержащий элементы DOM. Этот объект — ядро
библиотеки, и все методы работают именно с его экземплярами. Важное
свойство архитектуры — возможность расширять прототип объекта, добавляя
новые методы:
cash.fn.newMethod = function() {
// Доступ к каждому элементу через this[i]
return this.each(el => {
console.log(el.tagName);
});
};
Ключевой момент: все новые методы автоматически
становятся цепочечными, так как возвращают this.
Все методы Cash находятся в cash.fn, который является
сокращением для cash.prototype. Использование прототипа
позволяет:
Пример добавления метода для фильтрации элементов по классу:
cash.fn.filterByClass = function(className) {
const filtered = [];
this.each(el => {
if (el.classList.contains(className)) filtered.push(el);
});
return cash(filtered);
};
Cash поддерживает плагины, которые можно подключать независимо от ядра. Стандартная схема подключения:
(function(cash) {
cash.fn.highlight = function(color) {
return this.each(el => el.style.backgroundColor = color);
};
})(cash);
Особенности плагинной архитектуры:
cash.fn, сохраняя
цепочки.each, isArray, extend) для
консистентного поведения.Внутри Cash есть набор утилитных функций, доступных через статические
методы cash.*. Они позволяют:
cash.extend, cash.isFunction).Пример расширения утилиты:
cash.extend({
logElements: function(selector) {
cash(selector).each(el => console.log(el));
}
});
Архитектура Cash строится с учётом лёгкого делегирования событий.
Методы on, off, trigger работают
с внутренними хранилищами обработчиков, что обеспечивает:
Пример плагина для автоматического логирования кликов:
(function(cash) {
cash.fn.logClicks = function() {
return this.on('click', e => console.log('Clicked:', e.target));
};
})(cash);
eachМетод each является центральным элементом архитектуры
расширяемости. Он позволяет реализовать новые методы, обходя DOM
элементы, сохраняя цепочки вызовов и обеспечивая чистый доступ к каждому
элементу:
cash.fn.addCustomData = function(key, value) {
return this.each(el => el.dataset[key] = value);
};
Архитектура Cash предусматривает работу в изолированной области, предотвращая конфликты с другими библиотеками:
noConflict позволяет вернуть глобальный
$ к предыдущему значению.cash.fn, что
минимизирует риски поломки ядра.Cash совместим с CommonJS, AMD и ES-модулями. Это обеспечивает:
Пример подключения через ES-модуль:
import cash from 'cash-dom';
import './myPlugin.js';
cash('div').highlight('yellow');
Расширяемость Cash позволяет:
Архитектура Cash построена вокруг принципов минимализма и модульности, что делает библиотеку лёгкой для изучения и гибкой в расширении. Каждый элемент расширения строго контролируется через прототип и утилиты, обеспечивая стабильность и предсказуемость поведения.