17% скидка на размещение рекламы на площадках devby — до 20 ноября. Клац!
Support us

В jQuery нет классов? Но если очень хочется…

10 комментариев
В jQuery нет классов? Но если очень хочется…
При первом знакомстве с jQuery, после долгих отношений с mootools, впечатление было неоднозначное. Больше всего раздражали классы. Точнее, отсутствие в jQuery классов, наследования, и всего такого. - Как? - спрашиваю я - Совсем нет?. - Совсем нет - отвечали коллеги. А доки по jquery вообще деликатно промолчали на эту тему, упорно упоминая слово class только рядом с CSS. Но, как известно, если долго мучаться, что нибудь получится.
Вариант 1 - плагин
Можно использовать плагин от John Resig (один из разработчиков библиотеки jQuery) под названием Classy Query . Пример использования с его сайта:
var Person = jQuery.Class.create({
 init: function(name){
  this.name = name;
 }
});

var ClassyDude = Person.extend({
 sipWine: function(){
  return "Has a beautiful bouquet.";
 }
});
Говорят помогает, но мне к сожалению он попался на глаза совсем недавно. Так что пока довелось пользоваться только велосипедом, который опишу в пункте 2.
Вариант 2 - мой велосипед
Значит так, думаю я: что мне собственно нужно от классов? Чтобы функции, однажды написанные в предке появлялись и у потомков. Но ведь в js функции могут появляться и после инициализации js-объекта. Надо просто передать объект-псевдо-потомок в объект-псевдо-предок. И пусть предок допишет потомку, то чего ему не хватает. Например так:
var projectAjaxForm = new Object({
  init: function(_child) {
     _child.validator = _child.form.validate();
      _child.form.ajaxForm({
        dataType: 'json',
        beforeSubmit: function(){return _child.validate()},
        success:  function(json) {
          _child.submit_cb(json);
        }
      });
      if( !(_child.submit_cb) ) {
      _child.submit_cb = function(json){
                  // что то тут делаем...
      };
     }
     if( !(_child.validate) ) {
      _child.validate = function() {
        return this.validator.form();
      };
    }
      /* допилить напильником */
  }
});
а как бы наследоваться так:
var myForm = new Object({
  init: function(){
    this.form = $("#my-form");
    projectAjaxForm.init(this);
    }
});
Конечно, это не идеал, но мне на текущем проекте работу упрощает. В мыслях на будущее:
  • Сделать, чтоб функции могли не переопределяться полностью, а дополняться. Это довольно актуально.
  • Сделать аналог статических переменных. Это скорее для красоты, т.к. сейчас можно просто юзать глобальные объекты или переменные.
P.S.
Кажется я становлюсь поклонником jQuery :)
Читайте также
В России русифицировали JavaScript
В России русифицировали JavaScript
В России русифицировали JavaScript
7 комментариев
Python или JavaScript: что выбрать в 2025 году? Смотрим различия и рекомендуем годные курсы
Python или JavaScript: что выбрать в 2025 году? Смотрим различия и рекомендуем годные курсы
Python или JavaScript: что выбрать в 2025 году? Смотрим различия и рекомендуем годные курсы
Выбор языка программирования — это стратегия вашего развития в IT.  Какой язык откроет для вас больше возможностей в 2025 году: Python или JavaScript? Пробуем разобраться и не включать холивар.   
1 комментарий
Фронтендер — это фуллстак. Примите реальность. Разработчик рассказывает, как изменился рынок
Фронтендер — это фуллстак. Примите реальность. Разработчик рассказывает, как изменился рынок
Фронтендер — это фуллстак. Примите реальность. Разработчик рассказывает, как изменился рынок
Работы для джунов очень мало: у компаний ограниченные бюджеты, а ИИ становится всё более популярным. Технологии постоянно меняются, и объём теоретической «базы» значительно вырос. Фреймворки каждый год добавляют новые возможности. Расскажу, как обстоят дела на рынке фронтендеров.
37 комментариев
TIOBE назвал «язык года»-2024
TIOBE назвал «язык года»-2024
TIOBE назвал «язык года»-2024
1 комментарий

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.