ООП в моём тестовом задании, code review?
1. Вы инкапсулируете модуль Form, но при этом он зависит от глобальных переменных, а не получает нужные параметры при создании экземпляра.
2. Сам объект Form это ни что иное, как наглядная демонстрация антипаттерна God Object . Почему, не имеющий никакого отношения к форме, список является ее частью остается загадкой. Как и то почему в модуле инкапсулировано состояние приложения.
3. Насчет аргумента "e" уже не раз написали. Насколько я понимаю, вы видели на просторах интернета, что так часто называют аргумент функции, но, видимо, не поняли почему. Один аргумент имеет говорящее название user, но и оно вводит в заблуждение, так как на вход ожидается массив пользователей.
4. Почему не использованы возможности ES6 остается загадкой.
5. Попробуйте сами догадаться, что не так с этим отрывком кода.users.push(this.user);

let lastUser = users[users.length - 1];
6. У вас почти все переменные в методах объявлены свойствами объекта, при том, что в этом нет никакой необходимости и это может стать причиной ошибок в дальнейшем. Почему не использованы локальные переменные остается загадкой.
// создание полей input
    Form.prototype.createInput = function createInput(e) {
        for (let i = 0; i < e.length; i++) {
            this.input = document.createElement('input');
            this.input.type = e[i].type;
            this.input.classList = 'js-input';
            this.input.name = e[i].name;
            this.input.placeholder = 'Введите ' + e[i].content + ':';
            this.input.id = e[i].id;
            this.input.value = '';
            this.formWrap.append(this.input);
        }
    }
Тут вместо this.input нужна более локальная let input