Привет; Не очень дружу с клиентской стороной и одной из причин это кроссбраузерность. Сейчас хочу набросать небольшой плагин для jQuery. Читаю кучу статей и рекомендации, и везде делают публичные методы через указания первого аргумента и свойства-массив с методами, где ключ это название метода.
habrahabr.ru/post/158235
(function( $ ){
var methods = {
init : function( options ) {
return this.each(function(){
$(window).bind('resize.tooltip', methods.reposition);
});
},
destroy : function( ) {
return this.each(function(){
$(window).unbind('.tooltip');
})
},
reposition : function( ) {
// ...
},
show : function( ) {
// ...
},
hide : function( ) {
// ...
},
update : function( content ) {
// ...
}
};
$.fn.tooltip = function( method ) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Метод с именем ' + method + ' не существует для jQuery.tooltip' );
}
};
})( jQuery );
В целом интересно, но можно ли делать так:
$.fn.tooltip = function()
{
this.destroy = function() {};
this.reposition = function() {};
this.show = function() {};
this.hide = function() {};
this.update = function() {};
this.init = functin
// код init
// ..
return this;
};
})( jQuery );
// запуск
$.fn.tooltip().show();
Получается сама инициализация плагина инициализирует/создает объект и в нем уже регистрируются методы. После их быстро и красиво можно вызвать;
Или какие-то проблемы могут с этим быть? Так не делают? Так не работает? Или что?
Если так не надо делать, а надо как в статье, то как можно вызывать внутри init() другие методы, допустим show()?
Спасибо =)