Итак, есть замечательная библиотека jQuery, и с ее помощью можно делать потрясающие вещи. Пишите меньше, делайте больше - действительно.
Но каждый магазин может чувствовать, что у него есть некоторые повторяющиеся модели использования (одни и те же виджеты, одни и те же диалоговые окна и тому подобное), и, поскольку они всегда используют jQuery, они считают, что удобно немного расширить jQuery, чтобы включить свои собственные собственные вещи.
Теперь позвольте мне немного расширить значение этого маленького слова «расширить», что я собираюсь сделать, описав ситуацию на моем нынешнем рабочем месте. Ребята из JavaScript в этом магазине сделали копию библиотеки jQuery в версии X (сравнительно недавно) и добавили некоторые свои собственные. На самом деле, внутренние материалы основаны на jQuery SDK , который, насколько я могу судить, многим не известен, так как кажется, что он не известен Google по состоянию на 6 апреля , 2011. Вы можете видеть, что у него есть функция jQuery.ready
, которая, насколько я могу судить, не является частью стандартной библиотеки jQuery. Итак, они расширили jQuery.
Эта функция jQuery.ready
является хорошим местом для начала разговора о потенциальных (и явных) недостатках принятого подхода. Что ж, вы подумали бы, что ready
означает готовность, но, увы, это не так: вместо регистрации обратного вызова, когда DOM достаточно готов, он, кажется, выполняется, как только анализируется <script>
. Что действительно нелогично; они должны были вызвать функцию jQuery.notReady
, это было бы справедливо.
Справедливо, потому что я пользователь этой измененной библиотеки. И этот недостаток не единственный, я также обнаружил, что функция ep.ajax
, которая должна вести себя как jQuery.ajax
, но с некоторыми расширениями, не выполняет обратный вызов success
. [Обновление ради правильности: эта ошибка при выполнении обратного вызова произошла из-за того, что код обратного вызова получил доступ к несуществующему свойству.] Кроме того, простые диалоги, вызванные функцией dialog
модифицированной версии библиотеки, выглядят неработающими и не работают должным образом.
(Я действительно, действительно думаю, что вы никогда не должны забирать у пользователя хорошо известный, превосходный и надежный API только для того, чтобы иметь возможность добавлять некоторые пользовательские вещи - гораздо меньше, вы должны изменить этот API, даже когда вы не собираюсь его ломать.)
Что подводит меня к теме моего вопроса, вероятно, легко поддается ответу. Являются ли эти недостатки, если нет необходимости, такими, по крайней мере, общими зазорами, с которыми можно столкнуться при расширении jQuery? Я спрашиваю, потому что я далеко не эксперт по JavaScript или jQuery, но я знаю по другим языкам программирования, что совершенно возможно расширять объектные системы чистым способом, не изменяя исходную версию библиотеки. На самом деле, вы бы никогда этого не сделали, потому что тогда вы сами по себе с QA, исправлениями, обновлениями, документацией и т. Д. Так в чем же дело? Это невозможно в JavaScript? Или они просто испортили работу по расширению jQuery? Как бы вы расширили jQuery и jQuery UI? Указатели приветствуются. Спасибо.