Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Error: cliente no es una funcion

Buenas noches, intentando inicializar el atributo cliente dentro del constructor de Cuenta corriente con el metodo set cliente, como lo hace en un primer momento el tutor en el video, me salta el error que cliente no es una funcion

CuentaCorriente.js

import {Cliente} from './Cliente.js'

export class CuentaCorriente{
    #cliente;
    #saldo;
    numero;
    agencia;

    set cliente(valor){
        if (valor instanceof Cliente){
            this.#cliente = valor;
        }
    }

    get cliente(){
        return this.#cliente;
    }

    constructor(cliente, numero, agencia){
        this.cliente(cliente);
        this.#saldo = 0;
        this.numero = numero;
        this.agencia = agencia;
    }

index.js

import {CuentaCorriente} from './CuentaCorriente.js';
import {Cliente} from './Cliente.js';


const clienteItter = new Cliente("Itter", "30554664", "20305546644");
const cuentaItter = new CuentaCorriente(clienteItter, "1540", "2");
console.log(cuentaItter);
console.log(clienteItter);

Cliente.js

export class Cliente{
    nombreCliente;
    dniCliente;
    cuil;

    constructor(nombreCliente, dniCliente, cuil){
        this.nombreCliente = nombreCliente;
        this.dniCliente = dniCliente;
        this.cuil = cuil;
    }
}

Windows PowerShell

PS D:\CursosAlura\JavaScript\banco_popular> node .\index.js
file:///D:/CursosAlura/JavaScript/banco_popular/CuentaCorriente.js:20
        this.cliente(cliente);
             ^

TypeError: this.cliente is not a function
    at new CuentaCorriente (file:///D:/CursosAlura/JavaScript/banco_popular/CuentaCorriente.js:20:14)
    at file:///D:/CursosAlura/JavaScript/banco_popular/index.js:6:21
←[90m    at ModuleJob.run (node:internal/modules/esm/module_job:197:25)←[39m
    at async Promise.all (index 0)
←[90m    at async ESMLoader.import (node:internal/modules/esm/loader:337:24)←[39m
←[90m    at async loadESM (node:internal/process/esm_loader:88:5)←[39m
←[90m    at async handleMainPromise (node:internal/modules/run_main:61:12)←[39m
P

Pero luego cambiando la linea

  constructor(cliente, numero, agencia){
       ** this.cliente = cliente;**
        this.#saldo = 0;
        this.numero = numero;
        this.agencia = agencia;
    }

El error desaparece. O sea que no se puede inicializar con el metodo set como en un primer momento explico en el video

1 respuesta

Hola Gustavo.

Efectivamente el error que te marca es correcto. Estas intentando usar this.cliente() como una función, cuando la realidad es que al ser un setter, se debe usar como una variable. Entonces tu linea en lugar de ser:

this.cliente(cliente);

Debe ser

this.cliente = cliente; //se trata como una variable

Atte Leonardo