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

Usando forEach em um Objeto

Olá! Minha classe NegociacaoController eu fiz um pouco diferente, que estava indo bem até que foi preciso listar os campos e imprimir.

class NegociacaoController {
    constructor() {
        let $ = document.querySelector.bind(document);
        this._inputs =
         {
            'data': $('#data'),
            'quantidade': $('#quantidade'),
            'valor': $('#valor')
         };
        this._listaNegociacoes = new ListaNegociacoes();
    }

    ...
    //resto do meu código
    ...

    //E AQUI QUE COMPLICOU:
    _listarMeuObjeto(){
        Object.keys(this._inputs).forEach(
            function (chave) {

                console.log(chave);
                //Printa: [data, quantidade e valor]; PERFEITO

                console.log(this._inputs[chave]);
                //NegociacaoController.js:36 Uncaught TypeError: Cannot read property '_inputs' of undefined
        }); 
    }

Pq ele me retorna undefined?

Tipo, se eu vir e colocar:

console.log(this._inputs['data']);

funciona normalmente, mas listar dá este erro!

Grato desde já!

3 respostas

Pela mensagem de erro, o problema é no 'this' que está vindo como indefinido, dá um console.log(this) pra ver qual o objeto que ele está entendendo como this.

Oi Reginaldo! Evite guardar as propriedades de uma classe em um array! A boa prática é declarar cada atributo. Seu código ficou mais complexo.

Outra coisa, sugiro que termine os 3 módulos primeiro antes de modificar a aplicação para você não travar quando sair do percurso.

Além disso, a forma que você fez terá problemas com Angular 2, react e outros frameworks que usam Es6 e paradigma oo.

O problema do this é que seu escopo é dinâmico e não léxico. Siga o fluxo do treinamento que você aprenderá a diferença. Eu ensino (quando eu falar de arrow function). Mas a sua alteração não esta ciente desses detalhes, por isso meu apelo para seguir o fluxo padrão do curso e só modificar no final depois de ter aprendido as novidades.

solução!

Beleza Reginaldo?