Почему jQuery, похоже, препятствует использованию обычного ООП?
Недавно мы создали веб-приложение с использованием Prototype, что позволило использовать его функциональность Class.Create(). Прямо сейчас, мы рассматриваем возможность перехода на jQuery, поскольку это кажется "лучшей" библиотекой. Я читал по этой теме и узнал, что jQuery не имеет простой встроенной поддержки для создания классов, например Prototype. Конечно, все еще есть .prototype и jQuery.extend(как упоминалось в https://stackoverflow.com/info/79477/how-to-create-an-object-oriented-class-in-jquery), но после некоторого поиска я получил ощущение, что jQuery не "t действительно" хочу" вас script таким образом...
На той же странице есть сообщение, в котором упоминается плагин John Resig Classy, который отлично подойдет мне. Тем не менее, на странице указано, что на самом деле это была шутка за апрельский дурак, и что Resig на самом деле советует не использовать код. Я рад помочь, но я хотел бы понять, в чем причина всего этого, и, конечно же, что именно они хотят, чтобы вы это сделали. Может кто-нибудь просветить меня?
-edit -
Спасибо за интересные ответы. Для ясности: означает ли это, что это нормально, чтобы переписать классы, которые я сделал в Prototype, для jQuery-способа "формирования" класса и по-прежнему использовать их в том же "манере", что и раньше? Или это все еще считается плохой практикой, и должен ли я использовать другой подход?
Ответы
Ответ 1
Первый дрянной поиск Google для "объектно-ориентированного javascript" обернулся... но он объясняет то, что я хотел бы получить:
Объектно-ориентированное программирование JavaScript
Просто взгляните на первый абзац, и вы найдете:
Javascript - это не полностью объектно-ориентированный язык программирования. Использование классов в JS основано на функциональности прототипа. Библиотека Prototype маскирует использование прототипа для создания вашего класса. jQuery ожидает, что вы будете использовать функциональность прототипа так же, как если бы вы использовали обычный JS для расширения самого jQuery и создания собственных пользовательских объектов.
Ответ 2
jQuery для программистов JavaScript объясняет, как jQuery поощряет хорошие методы ООП.
Ответ 3
У меня была точно такая же проблема с конвертированием из Prototype в jQuery, и я все еще могу только подумать, чтобы сказать, что да, кажется, что они не все, что в Oop в смысле Prototype. все еще, кодируя jQuery, вы обнаружите, что сильно полагаетесь на JSON, и я думаю, это псевдо-официальная ближайшая вещь, которую вы получите.
часть jQuery ui фактически выполняет итерации по всем свойствам параметра, который вы передаете, и делает что-то с ним, а это значит, что вы вообще не можете сделать, скажем, Object.prototype, потому что это добавит материал в каждый объект, который jQuery ui будет рассматривать как соответствующий параметр.
скорость и масштабируемость поразительны, поэтому я бы сказал, что это вопрос времени, прежде чем вы перейдете к Prototype, и cometo с тем фактом, что ответ Justin фактически делает допустимую точку:)
Ответ 4
jQuery не имеет прямого встроенная поддержка для создания классов как Prototype делает
Как и не должно. Создание класса лучше всего оставить программисту, а не библиотеке. Я начал с библиотеки Prototype и ушел, потому что это было так раздуто. ООП в JavaScript совсем не сложно. Пока вы знаете, как использовать прототипы, все будет в порядке.
Создание эквивалента частных членов в JavaScript становится сложным при работе с Prototype Class.create
. И, честно говоря, я не думаю, что Class.create
дает вам что-нибудь полезное, что вы не можете сделать это самостоятельно или с помощью jQuery.
Вы всегда можете использовать обе библиотеки одновременно, чтобы помочь с переходом. В jQuery есть эта хорошая функция noConflict
, которая возвращает функцию $
ее первоначальному владельцу.