Tengo curiosidad por saber si hay mejores prácticas relacionadas con JQuery al construir bloques de código encapsulados.JQuery JavaScript Design: ¿Función autoejecutable u objeto literal?
Generalmente, cuando construyo una página me gusta encapsular las funciones utilizadas dentro de esa página dentro de un objeto. Esto me permite un poco de encapsulación cuando construyo aplicaciones. No hay nada que odie más que ver a un archivo JavaScript con un montón de este
function doSomethingOnlyRelevantOnThisPage() {
// do some stuff
}
que esto lo convierte en el diseño desordenado, y en realidad no se encapsulan una funcionalidad muy bien.
Comúnmente en muchos marcos, hay un estándar que se utiliza para realizar esta encapsulación.
En Mootools Favorecen la notación literal de objetos:
var Site = {
// properties and methods
}
En YUI Favorecen el Ser se ejecuta la función de notación:
(function() { // properties and methods })()
Lo bueno del segundo ejemplo es que se crea un cierre , lo que le permite definir propiedades y métodos privados.
Mi pregunta es esta: ¿Alguno de los aficionados a JQuery tiene alguna de las mejores prácticas para crear estas estructuras perfectamente encapsuladas? ¿Cuál es la razón de su uso?
Sigo viendo este patrón, pero anhelo un ejemplo más completo: tengo una página con algunos elementos interactivos distintos y bastante complicados cuya lógica debe encapsularse unos de otros. ¿Alguna sugerencia para organizar el código en ese tipo de situación? Usar $ .fn.extend para cada pieza de UI diferente parece contra intuitivo. –
Definitivamente no recomendaría extender la función jquery a menos que esté escribiendo un complemento, por lo que es algo que se puede volver a usar en muchas páginas. En su caso, rompería mi funcionalidad en sus distintas partes, creando una función autoejecutable para contener esa lógica en su propio cierre. Cualquier código compartido puede adjuntarse a jQuery a través de $ .extend, lo que le permitiría tener funciones de ayuda que no requieren el contexto de un elemento para funcionar. –
Muy buen artículo sobre Expresión de función invocada inmediatamente (IIFE) http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – stormwild