Leí en alguna parte que usar prototype
para extender objetos nativos (String
, Number
, Array
, etc.) era una mala idea. ¿Es esto cierto? ¿Por qué o por qué no?¿Está utilizando Prototype para extender objetos nativos malos?
Respuesta
No creo que sea malo. Si echas un vistazo a Ruby on Rails, muchos objetos nativos se amplían con funcionalidad personalizada y es un marco muy bueno.
Lo que sería malo es si cambiar los métodos existentes en objetos nativos. esto podría causar consecuencias imprevistas.
Ah, está bien. Sí, eso tendría sentido. –
Me mantendría alejado de extender/modificar el comportamiento de los objetos nativos.
Al menos tiene sentido cuando se desarrolla en un ambiente de equipo.
Simplemente porque, meses después, otro desarrollador que escribe otra pieza de código independiente no reconocerá inmediatamente el comportamiento modificado a menos que esté documentado en algún lugar y lo haya advertido antes de comenzar su tarea.
En su lugar, sugiero encapsular/"espacio de nombres" -ing toda esa funcionalidad de tal manera que alguien puede elegir o no utilizar las funciones modificadas.
Además, los objetos nativos y sus métodos se prueban exhaustivamente para casos de gran alcance. Entonces, debe estar completamente seguro de lo que está haciendo antes de modificar la funcionalidad nativa.
Hay una gran discusión sobre esto en este video de JSConf 2011 por Andrew Dupont. http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542
Básicamente los puntos son:
- No extienda
Object.prototype
- algunas personas podrían extender las cosas, algunas personas no lo hacen
- Usted necesita saber lo que está haciendo
- No utilice dos bibliotecas que amplíen las cosas, porque puede ser malo
- Extender prototipos para agregar funcionalidad estándar casi siempre está bien.
- 1. ¿Puede Prototype extender elementos SVG?
- 2. Recuperando elementos DOM nativos de objetos jQuery?
- 3. Getters/setters de JavaScript y extender objetos
- 4. Extender el widget GWT creado utilizando UIBinder
- 5. ¿Los prototipos son malos en JavaScript?
- 6. Devolución de objetos PHP "nativos" de una extensión
- 7. La comparación de objetos JavaScript nativos con jQuery
- 8. Mejorando sistemas realmente malos
- 9. conflicto jQuery/prototype
- 10. ¿Está disponible el código fuente de métodos nativos?
- 11. Objetos serializar utilizando xmlSerializer.Serialize y objetos IEnumerable
- 12. Los beneficios de JavaScript Prototype
- 13. barras de estado nativos
- 14. Estados posibles para hilos nativos en Android?
- 15. ¿El código C# está compilado en binarios nativos?
- 16. ¿Los indicadores son malos?
- 17. jRails vs. Prototype
- 18. javascript prototype inheritance
- 19. Autosizing textarea usando Prototype
- 20. ¿Los Singleton son realmente tan malos?
- 21. jQuery & Prototype Conflict
- 22. ¿Dónde encontrar Generic.xaml para controles WPF nativos?
- 23. JTable, JComboBox utilizando Objetos personalizados
- 24. Javascript Prototype Sintaxis
- 25. dojo, prototype y jquery
- 26. Objective-C cambiar utilizando objetos?
- 27. Métodos nativos en Java
- 28. ¿Cómo extender objetos de enumeraciones existentes en Scala?
- 29. Internet e Intellisense son malos para su memoria?
- 30. ¿Está utilizando extensiones paralelas?
Esta es una pregunta perfectamente válida de algún valor, imo. No debería estar cerrado. –
http://stackoverflow.com/faq#dontask dice que no es así. – vascowhite
Básicamente un duplicado http://stackoverflow.com/questions/8859828/javascript-what-dangers-are-in-extending-array-prototype/8859941#8859941 –