1

Estoy empezando con javaScript y tengo la siguiente funcion, la cual quiero que devuelva el objeto almacenado en la variable nuevaCuenta mediante el return:

// metodo para guardar los datos de la nueva cuenta
    function cuentaNueva() {
        // obtenemos el valor de los campos
        var cuenta = document.getElementById("numeroCuentaNueva").value;
        var nombre = document.getElementById("nombreCuentaNueva").value;
        var cantidad = document.getElementById("cantidadCuentaNueva").value;
        // comprobamos que los campos no estan vacios
        if (cuenta == "") {
            //mostramos el mensaje
            alert("El campo cuenta no puede estar vacio");
        } else if (nombre == "") {
            // mostramos el mensaje
            alert("El campo nombre no puede estar vacio");
        } else if (cantidad == "") {
            // mostramos el mensaje
            alert("El campo cantidad no puede estar vacio");
        } else {
            // hacemos el ingreso de la cuenta
            // creamos una instancia de la clase y guardamos el valor de campo cuenta, nombre y cantidad de la cuenta nueva creada
            var nuevaCuenta = new Cuenta(cuenta, nombre, cantidad);
            // variable para obtener el nombre el desplegable donde cargaremos los datos
            var sele = opener.document.getElementById("cuentas");
            //Creamos la opcion
            var option = document.createElement("option");
            // metemos el texto en la opcion 
            option.innerHTML = cuenta;
            // metemos la opcion en el select
            sele.appendChild(option);
            // motramos el mensaje
            alert("Cuenta creada con exito");
            // cerramos la ventana
            close();
        }
        // retornamos el objeto
        return nuevaCuenta;
    }

El caso esque cuando intento guardar el contenido en una variable para utilizarla en otra funcion no me funciona, no hace nada, podrian decirme en que me equivoco. Ejemplo de llamada a la funcion para almacenar en la variable var cue = cuentaNueva().getNumero();

El codigo del objeto es el siguiente:

class Cuenta {
    // declaramos el constructor
    constructor(numero, nombre, cantidad) {
        this.numero = numero;
        this.nombre = nombre;
        this.cantidad = cantidad;
    }

    // metodo para obtener el numero
    getNumero() {
        return this.numero
    }

    // metodo para obtener el nombre
    getNombre() {
        return this.nombre;
    }

    // metodo para obtener la cantidad
    getCantidad() {
        return this.cantidad;
    }
}
jose22
  • 11
  • 5

1 Answers1

0

Analicemos tu función de manera rápida:

function cuentaNueva() {
    ... // código aquí
    if (cuenta == "") {
        //mostramos el mensaje
        alert("El campo cuenta no puede estar vacio");
    } else if (nombre == "") {
        // mostramos el mensaje
        alert("El campo nombre no puede estar vacio");
    } else if (cantidad == "") {
        // mostramos el mensaje
        alert("El campo cantidad no puede estar vacio");
    } else {
        ... // código aquí
        var nuevaCuenta = new Cuenta(cuenta, nombre, cantidad);
        ... // más código aquí
        close();
    }
    // retornamos el objeto
    return nuevaCuenta;
}

Si cualquiera de las condiciones previas se cumplen, muestras un alert y tu función no inicializará la variable nuevaCuenta, devolviendo undefined.

Si usásemos para declarar la variable let en lugar de var, el propio compilador te avisaría de que hay algo raro en tu código:

function cuentaNueva(cuenta) {
    
    if (cuenta == "") {
       
    } else {
        let nuevaCuenta = 1; //por poner algo
    }

    return nuevaCuenta;
}

cuentaNueva();

Por tanto cuentaNueva sólo devuelve una Cuenta cuando todo va bien, y undefined si algo es incorrecto. Esto no es malo de por sí, puedes comprobarlo después:

let cuenta= cuentaNueva();
if (cuenta) {
  cuenta.getNombre();
} else {
  console.log('No se pudo crear');
}
Pablo Lozano
  • 45,934
  • 7
  • 48
  • 87