Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Compreensão e texto.split it's not a fonction

Olá !Eu estou com várias dúvidas sobre a compreensão do processo, e ainda tenho um pouco de duvida em relação os parametros.

1) Na etapa de criação dos metodos na nova classe helper, nos criamos os dois metodos seguintes :

class DateHelper {

    textoParaData(texto) {

        return new Date(...texto.split('-').map((item,indice) => item - indice % 2));

    }

    dataParaTexto(data) {

        return data.getDate()
            + '/' + (data.getMonth() + 1)
            + '/' + data.getFullYear();
    }
  }

No momento de criar o metodo ele necessita de parametros para que ao rodar a "função " o codigo leia os valores do parametro mencionado certo ? Agora, ao passarmos texto como parametro por exemplo, como que o codigo vai ler o que tem dentro de "texto" se nao atribuimos nenhum valor a ele. não deveria ser o parametro (this._inputDate.value....)

2) Ao criarmos a variavel data , no NegociacoesController :

adiciona(event) {

        event.preventDefault();

        let data = new DateHelper().textoParaData(this._inputData.value);

        let negociacao = new Negociacao(
                data,
                this._inputQuantidade.value,
                this._inputValor.value
            );


        console.log(negociacao);

        console.log(diaMesAno);
    }
}

A maneira de ler seria : variavel data recebe a "funçãotextoparadata" que esta dentro da classe datahelper ?

3)O objetivo todo é pegar o texto que nos tinhamos, transformar em um array para depois transformar esse array em uma data no tipo string mas com o formato de dia/mes/ ano certo ? Então no momento em que é criado a variavel helper nos passamos a classe DataHelper , porque queremos agora "rodar a função" que permite transformar a data em um texto no modelo dia/mes/ano certo ? mas porque passamos apenas datahelper Ai a transcrição indica que devemos adicionar em data , helper para gerar isso mas a função continua exatamente a mesma coisa so no console que indicamos helper.dataparatexto que recebe como parametro a negociacao.data ....

"Sinceramente, ao elaborar essas perguntas que devem estar confusas, comecei a entender um pouco mais kkk, mas se alguem entender o que estou perguntando e puder dar uma explicação ai eu agradeço"

4) Agora, meu codigo possui algum erro mas não estou entendo porque, o console indica que texto.split não é uma função ... segue o script

DateHelper:


class DateHelper {

    dataParaTexto(data) {

        return data.getDate()
            + '/' + (data.getMonth() + 1)
            + '/' + data.getFullYear();
      }

    textoParaData(texto) {

        return new Date(...texto.split('-').map((item,indice) => item - indice % 2));

    }
}

NegociacaoController:

class NegociacaoController {
    constructor(){
        let $ = document.querySelector.bind(document);

        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');
    }

    adiciona(event){
        event.preventDefault();
        let helper = new DateHelper();
        let data = new DateHelper().textoParaData(this._inputData.value);


        let negociacao = new Negociacao(data,
            this._inputQuantidade.value,
            this._inputValor.value


        );
        console.log(helper.textoParaData(negociacao.data));



    }   
}

e ai o console indica :

DateHelper.js:14 Uncaught TypeError: texto.split is not a function
    at DateHelper.textoParaData (DateHelper.js:14)
    at NegociacaoController.adiciona (NegociacaoController.js:22)
    at HTMLFormElement.onsubmit (index.html:14)
textoParaData @ DateHelper.js:14
adiciona @ NegociacaoController.js:22
onsubmit @ index.html:14

Bom, se você chegou até aqui ...Obrigado kkkk Abraço

3 respostas

Olá, tudo bom?

Vou tentar ti ajudar baseado na ordem do que você foi falando:

Pelo que eu entendi, você ficou com dúvida sobre o valor que a função textoParaData(texto)recebe. O valor dela você passa nessa linha:

let data = new DateHelper().textoParaData(this._inputData.value);

Esse this._inputData.value, possui um texto vindo? (da pra testar usando console.log)

solução!

Boa tarde, vou tentar responder algumas de suas perguntas, vamos lá:

1 - No momento que você faz a chamada do método em new DateHelper().textoParaData(this._inputData.value); você está falando "chame o método textoParaData e passe o valor de this._inputData.value para ele", e na definição do método textoParaData(texto){...} você está falando "dentro deste método o valor passado irá ser chamado de texto ", ou sejá, quando você passa algo por parâmetro o método pode chamar ele do nome que desejar, mas seu conteúdo será o mesmo;

2 - A forma de ler seria algo como "a variável data recebe o RESULTADO da função textoParaData()";

3 - Eu não entendi a pergunta, desculpe :(

4 - O único erro no seu código até esse ponto é que está chamando duas vezes a função textoParaData(). Aqui: let data = new DateHelper().textoParaData(this._inputData.value); e aqui: console.log(helper.textoParaData(negociacao.data));

Ou sejá, o erro está ocorrendo por que ao passar pela primeira vez dentro desse método você está atribuindo uma String, o que está certo, mas na parte do console.log(helper.textoParaData(negociacao.data));, onde ele passa pela segunda vez nesse método, você está passando um objeto Date e lá dentro você está chamado o método split(), mas objetos Date não possuem esse método. Troque a linha console.log(helper.textoParaData(negociacao.data)); por console.log(helper.dataParaTexto(negociacao.data)); e deve funcionar.

Espero ter entendido correntamente suas duvidas e conseguido responder de maneira satisfatória, qualquer pergunta pode mandar novamente.

Muito Obrigado !!!!

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