¿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?