patterns pattern learning example es6 javascript design-patterns unobtrusive-javascript module-pattern

pattern - Javascript: patrón de módulo vs patrón de constructor/prototipo?



object pattern javascript (4)

El patrón de prototipo nos ayuda a extender la funcionalidad y solo hay una instancia de funciones en una memoria, independientemente de la cantidad de objetos. En el patrón de módulos, cada objeto crea una nueva instancia de funciones en la memoria, pero proporciona el concepto de variables privadas / públicas y ayuda a encapsular las variables y funciones.

Me gustaría saber si el patrón del módulo o el patrón Constructor / protoType es más aplicable a mi trabajo.

Básicamente, estoy utilizando JavaScript no intrusivo: el documento HTML tiene una referencia al archivo .js.

Mi comprensión del patrón del módulo:

  • llamar a un método INIT (que es básicamente un método público que puedo crear y devolver usando el patrón del módulo)
  • En el método INIT, asigne todos los eventos de clic, etc.

Esto suena como el patrón perfecto para mi situación, ya que no necesito crear objetos y jerarquías de herencia, etc.

Mi comprensión del patrón Constructor / Prototipo:

  • para crear objetos
  • para usar herencia (es decir, subtipos de un supertipo)

¿Estoy en lo cierto, que para proporcionar javascript discreto, el patrón del módulo es ideal?


El patrón del módulo es mucho más fácil y más elegante que el prototipo. Sin embargo, pensando en el móvil primero. No es un patrón relevante para objetos medianos / grandes porque la inicialización necesita analizar todo el bloque antes de comenzar. Los cierres múltiples también crean dependencias circulares que el recolector de basura no libera (especialmente IE), da como resultado una huella de memoria más pesada no liberada hasta que se cierra la ventana (o pestaña) - verifique el administrador de tareas de Chrome para comparar- El tiempo de carga es inversamente proporcional al tamaño del objeto utilizando un patrón de módulo, mientras que este no es el caso para la herencia prototípica. Las declaraciones anteriores se verifican a través de múltiples puntos de referencia como este: http://jsperf.com/prototypal-performance/54

Como se vio en la última prueba. Es mejor que los objetos pequeños se inicialicen como objeto simple (sin estos patrones). Es adecuado para objetos individuales que no requieren cierre ni herencia. Es aconsejable evaluar si incluso necesita estos patrones.


Las funciones de constructor y los prototipos son una de las formas razonables de implementar clases e instancias. No se corresponden exactamente con ese modelo, por lo que normalmente debe elegir un esquema particular o un método auxiliar para implementar clases en términos de prototipos. ( Algunos antecedentes sobre las clases en JS ).

El patrón del módulo se usa generalmente para el espaciado de nombres, donde tendrá una instancia única que actúa como una tienda para agrupar funciones y objetos relacionados. Este es un caso de uso diferente de lo que es bueno para la creación de prototipos. No están realmente compitiendo entre ellos; puedes usar ambos de forma bastante feliz (por ejemplo, poner una función constructora dentro de un módulo y decir new MyNamespace.MyModule.MyClass(arguments) ).