atualizados. Ou se existir uma nova versao do jQuery que muda a forma como as coisas trabalham, nos podemos atualizar apenas nosso metodo ao inves de duzias de copias por todos os lugares. Chamo isso de "keeping a small footprint" nos meus aplicativos. Mantendo em menor numero possivel os pontos em que o aplicativo e influenciado pelo codigo mais generico, consigo deixar mais facil o conserto de bugs, atualizacao de frameworks, inclusao de novos recursos ou alterar funcionalidades.O segundo motivo e que isso gera menos codigo. Utilizando o mesmo metodo varias vezes, nao repito o trabalho e isso e importante em qualquer ambiente de trabalho. Isso tambem faz com que o codigo que meus visitantes precisam pegar seja menor.Na verdade, jQuery possui um sistema um pouco mais refinado de escrever widgets reutilizaveis como esse. Ao inves de encoraja-lo a coloca-lo em funcoes como no exemplo acima (o que e realmente bastante primitivo), ela encoraja a escrita de jQuery plug-ins. Aqui esta como poderia ficar: jQuery.fn.faq = function(options) {var settings = jQuery.extend({ terms: 'dt', definitions: 'dd' }, options); //"this" is the current context; in this case, the elements we want to turn into faq layouts $(this).find(settings.terms).hide().end().find(settings.definitions).click(function() { $(this).next().slideToggle(); }); return this;};que voce utilizaria atraves de: $('#faq').faq();Mas, olhando no exemplo acima, nao ha muita diferenca entre definir nossa funcao faq dessa maneira ou declara-la como uma funcao stand alone. Bom, ela nao esta no global namespace, mas poderiamos tao facil e simplesmente coloca-la em um namespace nosso proprio. Anexando-o a jQuery nos podemos encadea-lo com qualquer outro metodo jQuery. Outro beneficio e que o this nessa funcao e o mesmo do contexto da jQuery, seja la qual for ele no momento do encadeamento. Utilizando este padrao para plug-ins, somos capazes de construir nosso plug-in de forma que ele se pareca como parte do jQuery, mas na verdade nosso plug-in e basicamente uma simples funcao que pega algum contexto do jQuery, faz algo com ele e entao retorna o contexto para o proximo item na cadeia. Nao existe nenhuma grande complexibilidade aqui, o que faz com que seja facil para qualquer pessoa escrever um plug-in para o jQuery - eles sao apenas funcoes simples.Note que e possivel escrever plug-ins mais complexos no jQuery como metodos e estados. Esse tipo de padrao e suportado com o sistema de plug-in jQuery UI e que nao utiliza o mesmo mecanismo do plug-in basico (como o do nosso exemplo). Ao inves disso, voce anexa um objeto com metodos e propriedades no objeto jQuery (por exemplo $.ui.tabs). Existe um atalho para chamar este objeto ($(selector).tabs()) de forma que voce pode continuar encadeando da mesma forma que o plug-in faq. Mas devido ao motivo de ele nao retornar a referencia para o objeto tabs criado para o item no seu seletor, voce e forcado a chamar este seletor novamente para invocar seus metodos. Ao inves de chamar myTabInstance.add(url, label, index) voce precisa executar o seletor novamente e chamar sua funcao pelo nome (como uma "string"): $(selector).tabs('add', url, label, index);. Isso significa que voce esta executando o seletor duas vezes (a nao