he estado toda la noche intentando solventar el siguiente problema, tengo dos objetos, de un mismo prototipo, este prototipo tiene un método que añade un evento.
Los objetos no presentan ningún error, ni tampoco sus propiedades ni métodos, El problema viene cuando el evento es lanzado, Este solo actúa sobre el ultimo objeto que ha añadido el evento.
Pongo un ejemplo explicito :
Código Javascript:
Ver original
/* Funcion Simple que recibe por argumentos, la referencia del Objeto al que se le va a modificar la edad : edad actual +1*/ ModificadorEdad(objeto){ Objeto = objeto; Objeto.Age = (Objeto.Age+1); } /*Prototipo Persona, tiene dos propiedades, edad (sera modificada por la funcion de arriba y Objeto, que va a guardar la referencia del objeto instanciado*/ function Persona(age){ this.Age = age; this.Objeto; //Un metodo que recibe un argumento, este sera la referencia del objeto this.PutNameObject = function(Objeto){ this.Objeto = Objeto; } /*Segundo metodo, que añadirá un evento al body, este llamara a la funcion simple de arriva que modifica la edad del objeto que se le pase por argumento*/ this.ChargeEvent = function(){ objeto = this.Objeto; document.body.addEventListener("keypress", function () {ModificadorEdad(objeto);}, false); } } /*Instanciamos dos Objetos Persona : titos y pedro, cada uno lleva a cavo los dos metodos del prototipo*/ var titos = new Persona(30); titos.PutNameObject(titos); titos.ChargeEvent(); var pedro = new Persona(40); Pedro.PutNameObject(Pedro); Pedro.ChargeEvent();
Bien, como he dicho, los objetos no dan problemas, si llevamos a cavo este codigo simplificado en cosola, para titos y para pedro tendremos las propiedades bien inicializadas, su edad y la referencia de su objeto mismo, asi como si inspeccionamos el elemento body, veremos que se añadieron satisfactoriamente los dos eventos listener keypess.
El problema viene cuando lanzamos el evento, volvemos a consola, revisamos la propieadad edad y vemos que solo se ha modificado la del segundo objeto, en este caso para el objeto pedro ¿por que?