Foros del Web » Programando para Internet » Javascript »

Pasar funcion de un objeto por argumento

Estas en el tema de Pasar funcion de un objeto por argumento en el foro de Javascript en Foros del Web. Bueno, ya estamos otra vez con las duditas teoricas... Ya sabemos que javascript nos deja hacer esto: Código PHP: function  suma ( a , b ...
  #1 (permalink)  
Antiguo 21/10/2006, 13:35
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Pasar funcion de un objeto por argumento

Bueno, ya estamos otra vez con las duditas teoricas...

Ya sabemos que javascript nos deja hacer esto:

Código PHP:
function suma(a,b) { return a+b; }
function 
haz(f,a,b) { return f(a,b); }

alerthaz(suma,a,b) ); 
Siempre que la función no sea un método de un objeto. Si quisiéramos hacerlo con un método de una instancia, ¿cómo haríamos?:


Código PHP:
function haz(f) { return f(); }

function 
pareja(uno,dos) {
    
this.uno=unothis.dos=dos;
    
this.sumanos=function() {
        return 
this.uno+this.dos;
    }
}

var 
laPareja=new pareja(3,6);
alerthaz(laPareja.sumanos) ); 

Si se os ocurre...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 21/10/2006, 15:36
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 7 meses
Puntos: 4
Cita:
Iniciado por derkenuke Ver Mensaje
Bueno, ya estamos otra vez con las duditas teoricas...
bueno...., yo no debería meterme, de teoría poco y nada.

Cambiando esta linea se obtiene el resultado

Código HTML:
alert(laPareja.sumanos());
pero ya no se llama a haz(), que seguramente es lo que pretendes.

Saludos y disculpa por la intromicion.
__________________
by Capitán Buscapina
.
  #3 (permalink)  
Antiguo 21/10/2006, 19:33
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Hola derkenuke y Cap.Buscapina, normalmente se utiliza el método apply o call para solucionar este tipo de problemas , envío un ejemplo con comentarios, es un poco chaposo, pero ya se sabe, es teoría .
Código:
<head>
<title>Untitled</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
var uno = 1;
var dos = 2;
function haz(f) { 

	/*f() daría error ya que enviamos sólo la función 
	/function() { 
        return this.uno+this.dos;
    }
	y this en este caso se refiere a window, 
	si pondríamos f() devolvería 3, es decir  uno + dos,
	por lo tanto debemos utilizar de nuevo el método apply
	*/
	
	return f.apply(this)

  }

function haz2(f){
 // en este caso sólo enviamos el nombre de la función que es un método
 // de objecto laPareja que previamente hemos asignado a this con el método apply.
 return  this[f]()

}
function pareja(uno,dos) {
    this.uno=uno; this.dos=dos;
    this.sumanos=function() { 
        return this.uno+this.dos;
    }
}

var laPareja=new pareja(3,6);
// con el método apply this es igual a el objecto la laPareja y enviamos la función como argumento;
alert( haz.apply(laPareja,[laPareja.sumanos]));  
// de nuevo aplicamos el método apply pero en vez de enviar la función enviamos sólo el nombre de la función;
alert( haz2.apply(laPareja,["sumanos"]));  
//-->
</script>

</body>
</html>
Saludos
  #4 (permalink)  
Antiguo 22/10/2006, 07:25
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Exacto kepawe! Has dado en el clavo!

Ademas no conocía los métodos esos call() y apply(). He estado trasteando mucho con ellos ahora, son muy interesantes Para hacer menos farragosa la cosa.

Gracias!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 22/10/2006, 10:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 19 años, 8 meses
Puntos: 5
Me alegra haberte servido de ayuda , puedes encontrar ejemplos muy interesantes en la librería prototype, por ejemplo los métodos bind, bindAsEventListener y muchos otros que utilizan apply y call.
Saludos y hasta la próxima.
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:26.