Crie uma aula com o IIFE que não seja uma referência?

Sou novo em JavaScript e estou tentando criar "classes" com dados privados e funções públicas. Foi-me dito Imediatamente Invocado Function Expressions (IIFE) realizar isso, mas quando eu "instanciar" novos objetos da classe que referenciam os dados privados em vez de manter os seus próprios.

Parte disso é emprestada deCriar uma classe JS: IIFE vs return prototype

Por exemplo, uma simples "classe" de carros:

var Car = (function() {

    var body = { color: 'red' };
    Car.prototype.newColor = function(color) {
            body.color = color;
        };
    Car.prototype.getColor = function() {
            return body.color;
        };

    return Car;
})();

var car1 = new Car();
var car2 = new Car();

A cor do car2 também é alterada para roxo.

car1.newColor('purple');
car2.getColor(); // 'purple'

Eu quero que cada objeto da classe Car mantenha seus próprios dados privados. Como isso pode ser feito com o IFFE ou existe outro caminho?