Support us

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

Оставить комментарий
В 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 :)
Место солидарности беларусского ИТ-комьюнити

Далучайся!

Читайте также
10 популярных курсов по изучению JavaScript для крутой веб-разработки
10 популярных курсов по изучению JavaScript для крутой веб-разработки
10 популярных курсов по изучению JavaScript для крутой веб-разработки
JavaScript остается одним из самых популярных языков программирования в мире. Мы собрали список курсов и сертификаций по Javascript от основ до необычных особенностей. В листинге как платные, так и бесплатные онлайн-курсы. Погнали за новыми знаниями!
2 комментария
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Rust стал самым быстрорастущим языком по числу разработчиков
Rust стал самым быстрорастущим языком по числу разработчиков
Rust стал самым быстрорастущим языком по числу разработчиков
Бесплатные курсы по TypeScript, React, 3D разработке. По итогам могут взять на работу
Бесплатные курсы по TypeScript, React, 3D разработке. По итогам могут взять на работу
Бесплатные курсы по TypeScript, React, 3D разработке. По итогам могут взять на работу

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

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

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

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

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