Foros del Web » Programando para Internet » Javascript »

¿Cómo puedo ejecutar una función con argumentos si es pasada por argumento?

Estas en el tema de ¿Cómo puedo ejecutar una función con argumentos si es pasada por argumento? en el foro de Javascript en Foros del Web. Hola, estoy frente a otro interrogante: Resulta que quiero hacer algo como ésto: Código PHP: function  hazAlgo ( miAlerta ,  fdespues ) {      alert ( ...
  #1 (permalink)  
Antiguo 31/08/2007, 10:17
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
¿Cómo puedo ejecutar una función con argumentos si es pasada por argumento?

Hola, estoy frente a otro interrogante:

Resulta que quiero hacer algo como ésto:
Código PHP:
function hazAlgo(miAlertafdespues) {
    
alert(miAlerta);
    
fdespues();

Sirve para ejecutar algo en la función hazAlgo() y cuando termine ejecutar la función pasada por parámetro. Ejemplo:
Código PHP:
function hazAlgo(miAlertafdespues) {
    
alert(miAlerta);
    
fdespues();
}

function 
saluda() {
    
alert("hola");
}

hazAlgo("No oigo mi saludo."saluda); 
Eso está muy bien para funciones sin parámetros. De acuerdo. Ahora vamos a ponerle parámetros a saluda(): saluda(conQue):
Código PHP:
function hazAlgo(miAlertafdespues) {
    
alert(miAlerta);
    
fdespues();
}

function 
saluda(conQue) {
    
alert(conQue);

Está claro, llamemos ahora como llamemos a la función no hará lo que deseamos:
  • hazAlgo("No oigo mi saludo.", saluda ); -> salta un undefined porque conQue = undefined.
  • hazAlgo("No oigo mi saludo.", saluda("adios!") ); -> será todavía más desastroso, porque lo primero que ejecuta es saluda("adios!") y luego ejecuta hazAlgo("No oigo mi saludo.", undefined), y al intentar hacer undefined() ocurre un error.

Bueno, entramos en los closures, donde podemos "guardar" una función con sus argumentos:
Código PHP:
function suma(a,b) {
    
alert("La suma de "+a+" y "+b+" es "+(a+b)+".");
}
Function.
prototype.toClosure = function() {
    var 
this;
    var 
arguments;
    return function() {
        
f.apply(this,a);
    }
}

var 
suma5y10 suma.toClosure(5,10); 
Así suma5y10() nos hará lo mismo que suma(5,10), lo tenemos "guardado con argumentos" en esa variable.

Entonces sí funciona:
Código PHP:
function suma(a,b) {
    
alert("La suma de "+a+" y "+b+" es "+(a+b)+".");
}
function 
hazAlgo(miAlertafdespues) {
    
alert(miAlerta);
    
fdespues();
}

Function.
prototype.toClosure = function() {
    var 
this;
    var 
arguments;
    return function() {
        
f.apply(this,a);
    }
}

var 
suma5y10 suma.toClosure(5,10);
hazAlgo("No veo mi suma..."suma5y10); 
Bueno, ya me he enrollado mucho hasta aquí. La cuestión que tengo ahora es cómo hacer ésto con un setTimeout dentro de hazAlgo(), ya que cuando hago el setTimeout por primera vez, se pierde el contenido de suma5y10...
Código PHP:
function suma(a,b) {
    
alert("La suma de "+a+" y "+b+" es "+(a+b)+".");
}
function 
hazAlgo(miAlertanfdespues) {
    
alert("miAlerta es : "+miAlerta+" \n n es: "+n+" \n fdespues es: "+fdespues); 
    if(--
n>0) {
        
alert(miAlerta);
        
setTimeout("hazAlgo('"+miAlerta+"', "+n+", "+fdespues+")"1000);
    }
    else {
        
fdespues();
    }
}

Function.
prototype.toClosure = function() {
    var 
this;
    var 
arguments;
    return function() {
        
f.apply(this,a);
    }
}

var 
suma5y10 suma.toClosure(5,10);
hazAlgo("No veo mi suma..."3suma5y10); 

Siento la introducción , el tema es un poco "nuevo" para mí y no quería que nadie se perdiese.

¿Alguna idea para hacer ésto y que valga para cualquier función que no sea suma()?





Un saludo
__________________
- 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 31/08/2007, 11:01
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: ¿Cómo puedo ejecutar una función con argumentos si es pasada por argumento?

para lo primero no se si te servira esto:

Código PHP:
<html>
<
head>
<
script language="JavaScript">
function 
a(){
var 
prueba = new Function("alert('Hola');");
var 
prueba2 prueba;
prueba2();
}
</script>
</head>
<body onload="a()"> 


</body>
</html> 
la funcion suma podria ser asi:

Código PHP:
function suma(){
  var 
total 0;
  for(var 
i=0i<suma.arguments.lengthi++)
           
total += suma.arguments[i];

  return 
total;

ejemplo:
suma(2,3) = 5
suma(2,3,5) = 10
...

Saludos
  #3 (permalink)  
Antiguo 31/08/2007, 23:00
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
Re: ¿Cómo puedo ejecutar una función con argumentos si es pasada por argumento?

No wigglyUtrera, lo siento, pero no necesito ni crear la función prueba dentro de mi hazAlgo ni mejorar mi función suma.

Lo que necesito es que se pueda llamar a suma(5,10) cuando acabe de dar setTimeout()'s la función hazAlgo().

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 17:38.