Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

console.log está retornando um resultado diferente de um Array como no vídeo

No vídeo dessa aula, quando é dado um console.log no resultado do método adiciona(), é impresso um Array. Mas quando eu eu dou um console.log, o resultado está sendo um objeto da classe (hipotese), por que é um resultado bem diferente.

Minha classe NegociacaoController

class NegociacaoController {

    constructor(){

            let $ = document.querySelector.bind(document);

            this._inputData = $('#data');
            this._inputQuantidade =  $('#quantidade');
            this._inputValor = $('#valor');
            this._contador = 0;
            this._listaNegociacoes = new ListaNegociacoes();

    }

    adiciona(event) {

            event.preventDefault();

            console.log(this._inputData.value);
            console.log(this._inputQuantidade.value);
            console.log(this._inputValor.value);

            console.log("RAW DO CAMPO:");
            console.log(this._inputData);            

            console.log(this._inputData.className);
            console.log(this._inputData.id);
            console.log(this._inputData.getAttribute("diogenes"));
            console.log(this._inputData.setAttribute("diogenes","teste2")); //hasAttribute(name) TRUE | FALSE

            /*

            VALIDAR A DATA INSERIDA
            Observe ainda que se inserirmos uma data com caracteres adicionais à esquerda ou à direita,
            o erro não será lançado. Por exemplo, se definirmos a data 30/09/20199, o ano será truncado
            para os primeiros dígitos. Se informarmos ao método a data 130/09/2019, o dia será truncado 
            para os 2 últimos dígitos.

            Para que a validação funcione corretamente, acrescente marcadores na expressão regular para 
            indicar que queremos validar o texto exato, e nenhum caracter a mais:

            */
            if(!/^\d{4}-\d{2}-\d{2}$/.test(this._inputData.value)) throw new Error('Deve estar no formato aaaa-mm-dd');

            // ADICIONAR A LISTA
            this._listaNegociacoes.adiciona(this.criaNegociacao);

            console.log(this._listaNegociacoes.negociacoes); // AQUI QUE ESTÁ O PROBLEMA        

            this.limpaFormulario();

    }    

    // CRIAR A NEGOCIAÇÃO
    criaNegociacao(){

        // CONVERTER A DATA PARA DIA MÊS ANO
        let data = new DateHelper().converterData(new Date(this._inputData.value.split('-')));

        return new Negociacao(
            data,
            this._inputQuantidade.value,
            this._inputValor.value
        );

    }

    // LIMPAR O FORMULÁRIO APÓS UMA INSERÇÃO DA NEGOCIAÇÃO
    limpaFormulario(){

        console.log("LIMPANDO O FORMULÁRIO");

        this._inputData.value = "";
        this._inputQuantidade.value= 1;
        this._inputValor.value = 0.0;

        this._inputData.focus();

    }

}

O meu console.log retorna o seguinte:

[ƒ]
0: ƒ criaNegociacao()
arguments: (...)
caller: (...)
length: 0
name: "criaNegociacao"
__proto__: ƒ ()
[[FunctionLocation]]: NegociacaoController.js:55
[[Scopes]]: Scopes[2]
length: 1
__proto__: Array(0)

Ao invés de um array como mostrado O que fiz de errado?

Obrigado

1 resposta
solução!

Oi, Desiree, tudo bem?

Acredito que o método adiciona esteja com problemas, você está passando tudo pra dentro do console.log e não pediu para apresentar o objeto onde é criadao o array de negociações, que é this._listaNegociacoes = new ListaNegociacoes();, para que o array seja criado corretamente, o método adiciona deve ser:

 adiciona(event) {
    event.preventDefault();
    this._listaNegociacoes.adiciona(this._criaNegociacao());
    this._limpaFormulario();

    console.log(this._listaNegociacoes.negociacoes);
  }

Assim, quando uma negociação for criada, ela vai ser criada como uma array.