Soy nuevo en este foro y espero que me puedan ayudar, así como poder aportar en lo que mas pueda a sus consultas.
Inicio con la siguiente inquietud.
Hace un tiempo ya me metí al mundo de los prototipos ya que necesito manejar una buena performance en mi proyecto, pero creo que me enredé mucho.. o tal vez tengo las típicas lagunas de programador (que a todos nos pasa de vez en cuando) en las que te caes en tonterias XD
Bueno, la pregunta es la siguiente:
Tengo el siguiente código para probar la herencia con prototipos:
Código HTML:
cuando lo ejecuten se darán cuenta de que aunque solo instancia la función cambiaVoltaje para el objeto panel, el voltaje se cambia para todos los objetos creados (sé que si hago el cambio directamente al objeto padre deberia tener ese efecto ej: Maquina.prototype.config.voltaje = 1000000; y asi se aplicaria a todos, pero.... )Ver original
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="javascript"> $(document).ready(function(){ function Maquina(nombre) { this.nombre = nombre || "Evil Device"; this.encendida = false; this.power = function() { this.encendida = !this.encendida; alert(this.nombre + " está ahora " + (this.encendida ? "encendido" : "apagado")); }; this.utilizar = function() { if (this.encendida) alert("Bip! durududu... pip!"); }; this.config = { voltaje : 100, movimientos : {derecha:"der",izquierda:"izq",arriba:"arr",abajo:"aba"} }; } Maquina.prototype.cambiaVoltaje = function(volts){ this.config.voltaje = volts; } function Robot(nombre) { this.nombre = nombre || "Evil Robot"; this.utilizar = function() { if (this.encendida) alert("Bip! " + this.nombre + " a sus ordenes!"); }; } Robot.prototype = new Maquina(); Robot.prototype.constructor = Robot; function Androide(nombre) { this.nombre = nombre || "D.A.R.Y.L."; delete this.utilizar; // Los androides son autónomos this.mandar = function(orden) { if (this.encendida) alert(orden +" es mi misión ahora, jefe!"); }; } Androide.prototype = new Robot(); Androide.prototype.constructor = Androide; function RobotGigante(nombre) { this.nombre = nombre || "Ironman"; this.utilizar = function() { if (this.encendida) alert("Ooops. Creo que he pisado una ciudad!"); } } RobotGigante.prototype = new Robot(); RobotGigante.prototype.constructor = RobotGigante; var paranoid = new Androide("Marvin"); var panel = new Androide("Panel de Control"); var intergalactic = new RobotGigante("Planetary"); panel.cambiaVoltaje(100000000); alert("Androide:" + paranoid.config.voltaje); alert("Maquina:" + panel.config.voltaje); alert("RobotGigante(ROBOT):" + intergalactic.config.voltaje); }); </script> </head> <body> </body> </html> <!-- si copian y pegan la pagina funcionara en su totalidad //-->
¿Por qué esta modificando paranoid e intergalactic ?
Espero me puedan ayudar y la verdad es que tengo el presentimiento de que es una tonteria que no estoy viendo.
de ante mano muchas Gracias
NOTA: el código lo saque del tutorial : http://es.debugmodeon.com/articulo/conociendo-javascript-v-orientacion-a-objetos-2-herencia-la-cadena-de-prototipos
y lo modifique para hacer las pruebas.