Me doy cuenta de que esto se ha preguntado cientos de veces, sin embargo, parece que no entiendo el concepto de "por qué" los prototipos en JavaScript son apropiados, como para imitar las clases (sí , Sé que JavaScript es un lenguaje basado en prototipos, lo he recogido mucho).Tratando de entender el punto de los prototipos en JavaScript
Al igual que muchas otras personas que se esfuerzan por hacer de JavaScript un lenguaje cotidiano que uso, estoy acostumbrado al estilo de clase OOP normal, ya que he jugado en Java (y he usado clases tanto en ActionScript como en PHP). Sin embargo, mientras yo pienso entiendo cómo funcionan los prototipos, no puedo entender por qué son necesarios.
Aquí está mi script de ejemplo de la forma en que estoy actualmente la comprensión de los prototipos en JavaScript:
var Apple = function() {
// An apple?
};
Apple.prototype.color = "red";
Apple.prototype.changeColor = function(new_color) {
this.color = new_color;
};
Apple.prototype.getColor = function() {
alert('color: '+this.color);
};
var apple1 = new Apple();
var apple2 = new Apple();
apple2.changeColor("green");
apple1.getColor();
apple2.getColor();
... Yo había asumido que tal vez el prototipo significaba que compartía el mismo objeto en lugar de sólo la creación de un nuevo objeto cada vez; sin embargo, obviamente no es el caso, ya que tanto apple1 como apple2 tienen colores diferentes, aún (después de ejecutar dicho script).
Entonces escribió en lo que es más de una secuencia de comandos orientado a objetos:
var Apple = function() {
this.color = "red";
this.changeColor = function(new_color) {
this.color = new_color;
};
this.getColor = function() {
alert('color: '+this.color);
};
};
var apple1 = new Apple();
var apple2 = new Apple();
apple2.changeColor("green");
apple1.getColor();
apple2.getColor();
Con los mismos resultados (como se esperaba). ... ¿Por qué no se recomienda este último código? No tengo problemas para usar prototipos (suponiendo que los use correctamente), pero necesito entender el concepto de "por qué".
... ¿Alguna ayuda?
Eso realmente ayudó enormemente; gracias. Al hacer referencia a 'Apple.prototype.color', puedo ver que todavía es" rojo ", lo que reconfirma mi pensamiento original sobre los prototipos que hacen referencia a un solo objeto. Todavía es un poco confuso, ya que quiero especificar mis métodos directamente en ... bueno, funciones, pero creo que puedo estar aprendiendo el truco. Gracias de nuevo. – clicheName
@clicheName: De nada. Actualicé con un poco más de información, pero parece que lo entendiste. – user113716
¿Lo estoy entendiendo correctamente? Creo que son algo así como la variable estática y los métodos en Java que se comparten entre los objetos ... – Vishwanath