1
resposta

RangeError: maximum call stack size exceeded

Olá amigos,

quando eu retiro o _ da propriedade email, deixando ela pública e também quando mantenho o receiver como parâmetro para a função Reflect.set a aplicação lança esse erro (mencionado no título da pergunta), como se ele entrasse num loop de set. O que isso quer dizer?

PS. Retirei o receiver e funcionou sem erro, assim:

class Funcionario {

    constructor(email) {

        this._email = email;
    }

    get email() {

        return this._email;
    }

    set email(novoEmail) {

        this._email = novoEmail;
    }

}

let funcionarioProxy = new Proxy(new Funcionario('shopper.tiago@gmail.com'), {

    set(target, prop, value, receiver) {

        console.log(`O valor da propriedade ${prop} atualmente é ${target[prop]}`);
        console.log(`O novo valor atribuído é ${value}`);
        Reflect.set(target, prop, value);
    }
});

Assim também roda sem problemas:

target[pro] = value

Qual a razão disto?

1 resposta

Fala ai Tiago, tudo bem? Esse erro é porque a pilha de execução do JavaScript, também conhecida como call stack chegou ao seu tamanho máximo, normalmente isso ocorre quando a aplicação entra em algum loop infinito (como você disse).

Quando você diz que retirou o _, a classe ficou assim:

class Funcionario {

    constructor(email) {

        this.email = email;
    }

    get email() {

        return this.email;
    }

    set email(novoEmail) {
        this.email = novoEmail;
    }

}

Se sim, o motivo do loop infinito é porque tanto o get quando o set vão se auto chamar eternamente, pois possuem o mesmo nome.

Nesse caso o get email está chamando this.email que seria ele próprio e isso fica eternamente assim (o mesmo vale para o set).

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software