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 originalfunction alerta1(){
this.json1 = {
nombre: "json1",
apellido: "apellido1",
edad: 20
};
this.subalerta1_2 = function(edad){
alert("Tu edad al cuadrado: " + (parseInt(edad) * 2));
};
this.subalerta1_2(this.json1.edad);
}
function alerta2(){
var a1 = new alerta1();
a1.subalerta1_2(25);
a1.json1.edad = 35;
a1.subalerta1_2(a1.json1.edad);
}
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