Foros del Web » Programando para Internet » Javascript »

Llamar a funcion dentro de otra funcion

Estas en el tema de Llamar a funcion dentro de otra funcion en el foro de Javascript en Foros del Web. Hola amigos por favor ayúdenme en esto: quiero desde la funcion alert2(), modificar el JSON de la funcion alerta1() y ademas invocar solo la funcion ...
  #1 (permalink)  
Antiguo 27/04/2016, 14:28
Avatar de renelmedina  
Fecha de Ingreso: abril-2016
Mensajes: 4
Antigüedad: 8 años
Puntos: 0
Llamar a funcion dentro de otra funcion

Hola amigos por favor ayúdenme en esto: quiero desde la funcion alert2(), modificar el JSON de la funcion alerta1() y ademas invocar solo la funcion subalerta1_2() de la funcion alerta1(), desde la funcion alert2()
Código Javascript:
Ver original
  1. function alerta1(){
  2.     var json1={
  3.             nombre: "json1",
  4.             apellido:"apellido1",
  5.             edad:20
  6.         }
  7.     subalerta1_2(json1.edad);
  8.     function subalerta1_2(edad){
  9.             alert("tu edad al cuadrado: "+(parseInt(edad)*2));
  10.         }
  11. }
  12.  
  13. function alert2(){
  14.     alert1().subalerta1_2(25);
  15.         alert1().json1.edad=35;
  16. }
Claro que podria poner todo en funciones independientes, pero cuando se trata de usar el constructor de google maps, no te queda de otra que limitarte a lo que te dan. Agradesco su ayuda
  #2 (permalink)  
Antiguo 27/04/2016, 18:39
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Llamar a funcion dentro de otra funcion

La forma en la que intentas hacer eso es incorrecta. Estás tratando a la función "alert1" como si fuera constructora y poseyera el método "subalerta1_2" cuando lo único que contiene como conjunto de instrucciones consiste en la declaración de una variable a la cual se le asigna un objeto literal, además de la llamada a una función que es declarada más abajo.

Para tratar a la primera función como constructora, necesitas instanciarla, para lo cual debes utilizar la palabra reservada new; exactamente como cuando instancias una clase en Java o PHP. Existe otra forma, pero para efectos de la explicación, solo mencionaré esta. Y ya que la función "alerta1" será constructora, para asignarle atributos y métodos (para que así puedas acceder a ellos mediante la notación por puntos, como lo intentaste), necesitarás utilizar la palabra reservada this, misma que hará referencia a la función constructora:
Código Javascript:
Ver original
  1. function alerta1(){
  2.     this.json1 = {
  3.         nombre: "json1",
  4.         apellido: "apellido1",
  5.         edad: 20
  6.     };
  7.  
  8.     this.subalerta1_2 = function(edad){
  9.         alert("Tu edad al cuadrado: " + (parseInt(edad) * 2));
  10.     };
  11.  
  12.     this.subalerta1_2(this.json1.edad);
  13. }
  14.  
  15. function alerta2(){
  16.     var a1 = new alerta1();
  17.     a1.subalerta1_2(25);
  18.     a1.json1.edad = 35;
  19.     a1.subalerta1_2(a1.json1.edad);
  20. }
  21.  
  22. alerta2();

El primer mensaje de alerta mostrará el mensaje "Tu edad al cuadrado es 40", puesto que, al instanciar a la función "alerta1", se ejecuta el código que esta posee, en el cual se encuentra una llamada al método "subalerta1_2". Enseguida, se mostrará el mensaje "Tu edad al cuadrado es 25", puesto que, luego de la instanciación, se ejecuta otra llamada al método "subalerta1_2", pero esta vez desde la función "alerta2", en la cual se le pasa el valor 25 como argumento. Finalmente, luego de modificar el valor del atributo del objeto "json1" de nombre "edad", mismo que es atributo de la función "alerta1", se ejecutará una nueva llamada al método "subalerta1_2", pero con el valor actualizado de la edad como argumento, obteniendo el mensaje "Tu edad al cuadrado es 70" como tercer y último mensaje de alerta.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: funcion, google, js
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 16:57.