¿Cuántos de ustedes todavía usan PrototypeJS a partir de la segunda mitad de 2014? ¿Por qué o por qué no?

Todavía uso PrototypeJS en todos mis proyectos paralelos y mi proyecto principal. Disfruto usarlo ya que el código que me obliga a escribir puede autodocumentarse, pero siempre está claro qué comportamiento ocurre cuando se llama a un método determinado.

Me gusta que haya muchas funciones integradas en la biblioteca principal, lo que significa que no necesito cargar otras bibliotecas para esa función.

  • Por ejemplo, ¿sabía que PrototypeJS maneja plantillas simples similares al bigote? Ya está listo para usar. Prototipo v1.7.2 Plantilla de documentación API
  • Hay clases orientadas a objetos que le permiten escribir clases similares como lo haría en OOP. Definiendo clases y herencia
  • Rangos que le permiten usar cualquiera de los métodos de enumeración en una lista de números o letras. Prototipo v1.7.2 Documentación API ObjectRange

También descubrí que los desarrolladores que conocen PrototypeJS y lo usan regularmente suelen estar más familiarizados con Javascript vainilla y desarrolladores de Javascript más fuertes. Creo que es una consecuencia de la forma en que PrototypeJS extiende selectivamente los tipos nativos.

PrototypeJS obtuvo una mala reputación hace un tiempo cuando extendió el prototipo de Object con métodos universales, pero en las últimas versiones eso ya no sucede. Existen medidas de seguridad para evitar sobrescribir los métodos ES5 y algunos trabajos para evitar sobrescribir los métodos ES6. Muchos de los métodos PrototypeJS han sobrevivido a la controversia (Mootools String.prototype.contains () vs String.prototype.includes ()) porque la base de la biblioteca es Ruby, que tiene oscuras convenciones de nomenclatura.

PrototypeJS también fue un catalizador para un número significativo de métodos que se convirtieron en métodos nativos, Function # bind () para uno (fuente Nota 1. ECMAScript. Funciones enlazadas), por lo que, por extensión, los usuarios de Javascript vanilla están utilizando funciones PrototypeJS que se han incorporado al código nativo.

Una opinión que se ha compartido conmigo es que el desarrollador se alegró de que su biblioteca principal de Javascript (PrototypeJS) no cambiara constantemente (lo que significa API o métodos obsoletos) ya que lo obligaría a volver a escribir el código antiguo cada vez que hubiera un nuevo lanzamiento.

No, no lo estoy usando porque mi proyecto comenzó con Angular JS y cambiar el marco entre desarrollo es una mala idea.
Entonces, si tiene alguna idea de marco relacionada con JS, se relacionará muy bien a continuación con las ventajas y desventajas.

Usa el prototipo. Devolver objetos específicos de constructores los hace no constructores, y asignar métodos a esto hace que la herencia sea menos conveniente.
Devolver un objeto literal
Pros:

  • Si una persona olvida algo nuevo, todavía obtiene el objeto.
  • Puede crear variables verdaderamente privadas, ya que todos los métodos del objeto definido dentro del constructor comparten su alcance.

Contras:

  • No es un verdadero constructor. Agregar algo a su prototipo no cambiará los objetos devueltos, nuevos o no nuevos. La nueva instancia de Foo () de Foo también daría como resultado falso.

Usando prototipo
Pros:

  • Dejas el constructor despejado.
  • Esta es la forma estándar de hacer cosas en JavaScript, y todos los constructores incorporados ponen sus métodos en sus prototipos.
  • La herencia se vuelve más fácil y más correcta; puede (y debe) usar Object.create (ParentConstructor.prototype) en lugar del nuevo ParentConstructor (), luego llame a ParentConstructor desde Constructor. Si desea anular un método, puede hacerlo en el prototipo.
  • Puede “modificar” los objetos después de que ya se hayan creado.
  • Puede ampliar los prototipos de constructores a los que no tiene acceso.

Contras:

  • Puede llegar a ser demasiado detallado, y si desea cambiar el nombre de la función, también debe cambiar todas las funciones agregadas al prototipo. (O eso o definir el prototipo como un gran objeto literal con un descriptor de propiedad compatible para el constructor).
  • No comparten un alcance específico de instancia, por lo que realmente no puede tener variables privadas.

Asignando a esto. * En el constructor
Pros:

  • Puede usar cierres y, por lo tanto, variables de miembros privados.

Contras:

  • No mecanografía pato; no puede llamar a un método directamente desde el prototipo con ningún objeto antiguo. Por ejemplo, Array.prototype.slice.call (collectionLikeObject).

Todavía estoy usando ProtoypeJS y me encanta. Se ha quedado atrás debido a la “mala prensa”. Pero me gusta es mejor que JQuery cualquier día. Angular: no he trabajado con eso, no puedo decirlo.

¿Por qué me gusta PrototypeJS? Número de razones, pero en su mayoría todas enumeradas por la respuesta de Shishir Dwivedi, pero principalmente “haciendo la forma estándar de hacer JavaScript”. Por lo poco que he visto de Angular, me preocupan muchos aspectos, aunque en mi opinión, queda por ver cómo evoluciona el marco.