Foros del Web » Programando para Internet » Javascript »

Reescribir un metodo

Estas en el tema de Reescribir un metodo en el foro de Javascript en Foros del Web. El problema que tengo es simple, no puedo reescribir un metodo por fuera de su definicion. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original function employee ...
  #1 (permalink)  
Antiguo 23/03/2013, 18:19
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 16 años, 4 meses
Puntos: 35
Reescribir un metodo

El problema que tengo es simple, no puedo reescribir un metodo por fuera de su definicion.
Código Javascript:
Ver original
  1. function employee(name,jobtitle,born){
  2.     this.name=name;
  3.     this.jobtitle=jobtitle;
  4.     this.born=born;
  5.     this.callme = function(){
  6.         return 'original';
  7.     }
  8. }
  9.  
  10. employee.prototype.callme= function(){
  11.     return 'alternativo';
  12. }
  13. var fred=new employee("Fred Flintstone","Caveman",1970);
  14.  
  15. fred.callme()
Siempre retorna 'original'
__________________
I am Doyle please insert code.
  #2 (permalink)  
Antiguo 24/03/2013, 03:07
Avatar de calambrenet  
Fecha de Ingreso: julio-2010
Ubicación: Jaén
Mensajes: 162
Antigüedad: 14 años, 4 meses
Puntos: 18
Respuesta: Reescribir un metodo

Puedes crear una clase hija y llamar al padre con call, después puedes sobrescribir la función callme:

Código Javascript:
Ver original
  1. function employee_hija(name, jobtitle, born) {
  2.     employee.call(this, name, jobtitle, born);
  3.    
  4.     this.callme = function(){
  5.         console.log('alternativo');
  6.     }
  7. }
__________________
Miembro de CODEFRIENDS /*freelance developer*/
GigaOlive -compra aceite de oliva desde tu móvil-
  #3 (permalink)  
Antiguo 24/03/2013, 08:18
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Reescribir un metodo

yo haría algo mas simple. pasarle una variable
Cita:
function employee(name,jobtitle,born){
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
this.callme = function(op){
this.opcion = op || 'original';
return this.opcion;
}
}

var fred=new employee("Fred Flintstone","Caveman",1970);

fred.callme('alternativo')
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 24/03/2013, 09:47
Avatar de calambrenet  
Fecha de Ingreso: julio-2010
Ubicación: Jaén
Mensajes: 162
Antigüedad: 14 años, 4 meses
Puntos: 18
Respuesta: Reescribir un metodo

Cita:
Iniciado por IsaBelM Ver Mensaje
yo haría algo mas simple. pasarle una variable
Ya, pero el tema es sobrescrbir una función en una clase heredada. (A no ser que yo lo haya entendido mal)
__________________
Miembro de CODEFRIENDS /*freelance developer*/
GigaOlive -compra aceite de oliva desde tu móvil-
  #5 (permalink)  
Antiguo 24/03/2013, 09:52
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Reescribir un metodo

buenas...
no se a ustedes pero a mi me parece que el asunto viene por la comprehensión de cómo funciona el esquema de prototipos. es por ello que me animo a ofrecer mi versión.

básicamente sucede porque el objeto tiene declarado explícitamente un identificador (propiedad o método). javascript sigue una cadena o camino para la resolución de identificadores. en este caso, comienza por el objeto en sí, luego por su prototipo y continua por el resto de los prototipos según de quién va heredando. si se quiere invocar un método específico de la jerarquía cuando ocurre el conflicto por el nombre de identificador, se debe accesar a dicho método e invocarlo mediante la función call o apply:
Código:
function F(a,b){
this.a = a;
this.b = b;
this.m = function(){ return this.a + this.b; };
}

F.prototype.m = function(){ return this.a - this.b; };

var f = new F(0,1);
F.prototype.m.call(f); // método call;
F.prototype.m.apply(f, []); // método apply, si no requiere argumento el segundo parámetro se puede obviar;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: metodo, reescribir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:50.