¿Crear una clase con IIFE que no sea una referencia?

Soy nuevo en JavaScript y estoy tratando de envolver mi cabeza en torno a la creación de "clases" con datos privados y funciones públicas. Me han dicho que las expresiones de función de invocación inmediata (IIFE) logran esto, pero cuando "instalo" nuevos objetos de la clase hacen referencia a los datos privados en lugar de guardar los suyos.

Algo de esto es prestado deCrear una clase JS: IIFE vs volver prototipo

Por ejemplo, una simple "clase" de coches:

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();

El color de car2 también se cambia a púrpura.

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

Quiero que cada objeto de la clase Car tenga sus propios datos privados. ¿Cómo se puede lograr esto con IFFE, o hay otra manera?

Respuestas a la pregunta(3)

Su respuesta a la pregunta