При первом знакомстве с 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); } });Конечно, это не идеал, но мне на текущем проекте работу упрощает. В мыслях на будущее:
- Сделать, чтоб функции могли не переопределяться полностью, а дополняться. Это довольно актуально.
- Сделать аналог статических переменных. Это скорее для красоты, т.к. сейчас можно просто юзать глобальные объекты или переменные.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.