El objetivo del patrón del módulo es modularizar el código.
Hay varias formas de modularizar código en JavaScript como:
- Usando objetos literales.
- El patrón del módulo.
- Patrón de módulo revelador
- y tantos otros ..
Usando la notación literal del objeto.
- ¿Cuáles son las mejores aplicaciones de transmisión de API de Twitter para fines no científicos de datos?
- Cómo hacer un programa de mayor o menor uso del mismo botón en JavaScript
- ¿Cuál es la mejor manera de aprender JavaScript?
- Dada la opción entre .net rest API vs Node.js vs otra plataforma, ¿cuál elegirías como plataforma API para construir una aplicación sincrónica y sin bloqueo que debería manejar millones de solicitudes concurrentes?
- ¿Es posible hacer un sitio web como Khanacademy.com gratis?
var objLiteral = { nombre: "John Snow", trabajo: función myWork () { console.log ('¿quién hace del mundo un lugar mejor para vivir? La respuesta es' + this.name); } } objLiteral.name; // salidas "John Snow" objLiteral.work; // produce "¿quién hace del mundo un lugar mejor para vivir? La respuesta es John Snow"
Usar patrón de módulo
var myModule = (function () { var privVar = "John Snow"; regreso { "whatsMyName": privVar, "howIsDay": function () {console.log ("¡es bueno!"); } } }) (); myModule.whatsMyName; // salidas "John Snow" myModule.privVar; // Esto no funcionará ya que privVar solo está disponible dentro del alcance de myModule y no fuera de él, ya que no se devuelve.
Cosas a tener en cuenta en el patrón del módulo:
- El patrón de módulo encapsula propiedades privadas mediante cierres.
- El patrón es similar a IIFE (expresión de función invocada inmediatamente), excepto que se devuelve un objeto y no una función.
- En JavaScript no existe el concepto de modificadores de acceso como público, privado, paquete, protegido. JavaScript solo tiene un alcance de variables, es decir, el alcance de la función. Entonces, tenemos que usar la función para simular el concepto del patrón del módulo OOP.
- Solo exponemos funciones y propiedades a las que queremos que tenga acceso el resto del código. El resto es privado dentro del cierre.
Patrón de módulo revelador
var rmp = function () { var privVar = "John Snow"; función fun1 () { console.log ('Es un hermoso día'); } función fun2 () { console.log ('¿Ves Game of Thrones?'); } función fun3 () { console.log ('Harry Potter es increíble'); } regreso { api1: fun1, api2: fun2 } } ();
Cosas a tener en cuenta en el patrón de módulo revelador:
- El objeto devuelto es un objeto sin definición de función. Todas las expresiones del lado derecho en la declaración de retorno son variables de cierre.
- El objeto de devolución decide qué se expone como API y qué se mantiene como propiedad privada. fun1 está disponible a través de rmp.api1, fun2 está disponible a través de rmp.api2 y fun3 no está disponible en el código de código anterior fuera de rmp.
- Tenga cuidado con el patrón Revealing Design si está diseñando una API que se utilizará fuera de su equipo. Si desea anular la definición de rmp.api1, no puede hacerlo, ya que rmp.api1 es una referencia a fun1, que es una propiedad privada de rmp. Por lo tanto, no hay forma de anular rmp.api1. Esto se considera un anti patrón.
Para más información, consulte:
- Patrones JavaScript de Stoyan Stefanov
- Aprendizaje de patrones de diseño de JavaScript por Addy Osmani