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

constructor factory


var ConnectionFactory = (function () {

    const stores = ['negociacoes'];
    const version = 4;
    const dbName = 'aluraframe';

    var connection = null;

    var close = null;

    return class ConnectionFactory {

        constructor() {

            throw new Error('Não é possível criar instâncias de ConnectionFactory');
        }

        static getConnection() {

            return new Promise((resolve, reject) => {

                let openRequest = window.indexedDB.open(dbName, version);

                openRequest.onupgradeneeded = e => {

                    ConnectionFactory._createStores(e.target.result);

                };

                openRequest.onsuccess = e => {

                    if(!connection) {
                        connection = e.target.result;
                        close = connection.close.bind(connection);
                        connection.close = function() {
                            throw new Error('Você não pode fechar diretamente a conexão');
                        };
                    }
                    resolve(connection);

                };

                openRequest.onerror = e => {

                    console.log(e.target.error);

                    reject(e.target.error.name);
                };

            });
        }

        static _createStores(connection) {

            stores.forEach(store => {

                if (connection.objectStoreNames.contains(store)) connection.deleteObjectStore(store);
                connection.createObjectStore(store, { autoIncrement: true});

            });

        }

        static closeConnection() {

            if(connection) {
                close();
                connection = null;
                close = null;
            }
        }
    }


})();

pq e necessario chamar constuctorfactory. funçao, dentro da propria classe e nao so chamar por this.funcao?

1 resposta
solução!

Olá Luan, tudo bem com você?

Isso tem haver com o fato dos métodos da classe serem estáticos, veja:

static _createStores(connection) {
static closeConnection() {
static getConnection() {

Quando utilizamos o this estamos nos referindo a uma instância de objeto, por exemplo na classe Negociacao, que utilizamos sempre o this, isso acontece porque não são métodos estáticos e os atributos data, quantidade, valor sempre se referem a uma instância (objeto) do tipo Negociação, e não a classe Negociacao!

No ConnectionFactory a situação é diferente, todos os métodos pertencem a própria classe, e não a um objeto (_ isso fica até bem explicito dado que lançamos um erro no construtor quando tentamos criar um objeto_) :)

Isso é bastante comum em linguagens orientadas a objetos, métodos estáticos são referenciados pela Classe a qual ele pertence, enquanto métodos "normais", que se referem a instância, podemos utilizar tranquilamente o this :)

Conseguiu Compreender?

Abraços e Bons Estudos!