2012-04-17 9 views
14

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?

+9

Esta es una pregunta perfectamente válida de algún valor, imo. No debería estar cerrado. –

+0

http://stackoverflow.com/faq#dontask dice que no es así. – vascowhite

+0

Básicamente un duplicado http://stackoverflow.com/questions/8859828/javascript-what-dangers-are-in-extending-array-prototype/8859941#8859941 –

Respuesta

6

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.

+0

Ah, está bien. Sí, eso tendría sentido. –

1

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.

5

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.