La mayoría de las veces (tutoriales principalmente), he visto “prototipos” utilizados para métodos.
Estoy bastante seguro de que también se puede usar para variables (quizás la más útil para configurar “valores predeterminados”). ¿Hay alguna razón por la que no se usa a menudo para funciones? ¿Es una mala práctica o hay diferencias notables en el rendimiento?
Piénselo al revés: ¿por qué querría almacenar el atributo de un objeto en su prototipo?
Hay dos respuestas:
Como mencionó gilly3 , 2. puede suceder accidentalmente si no estás absolutamente seguro de lo que estás haciendo. (Oh sí, me pasó a mí …)
Mejores prácticas:
[editar]
[/editar]
Y sí, el rendimiento del uso del prototipo es ligeramente peor que a la inversa. PERO nunca debe tratar de optimizar cosas como esa, ya que la ganancia de rendimiento es casi imperceptible, aunque la legibilidad y la capacidad de mantenimiento de su código pueden sufrir significativamente.
Desde lo alto de mi cabeza, pierdes la funcionalidad de hasOwnProperty()
, que puede ser útil si alguna vez estás haciendo un bucle for ... in
en tu objeto. Considera estos dos objetos:
function MyObject() { ... } MyObject.prototype.someProperty = 1; var a = new MyObject(); var b = new MyObject(); b.someProperty = 2; a.hasOwnProperty("someProperty"); // false b.hasOwnProperty("someProperty"); // true
Eso puede o no puede importar para su situación.
Edición: Pensamiento de otro. Si almacena objetos en su prototipo y una instancia de ese objeto cambia una propiedad en ese objeto, afectará a todas las demás instancias:
function MyObject() { ... } MyObject.prototype.someProperty = { value: 1 }; var a = new MyObject(); var b = new MyObject(); b.someProperty.value = 2; a.someProperty.value; // 2!! not 1
El objeto prototipo de JavaScript, introducido a partir de JavaScript 1.1, es un objeto creado previamente que simplifica el proceso de agregar propiedades / métodos personalizados a todas las instancias de un objeto.
Puedes agregar propiedades predeterminadas, aquí hay un ejemplo:
function myObject() { this.constructor(); } myObject.prototype = { constructor : function () { this.MyProperty1 = "123456"; //default property this.MyProperty2 = "bla"; //default property } };
Déjeme saber si esto ayuda…