¿Por qué las propiedades de mis objetos JavaScript se sobrescriben con otras instancias?

Creé un objeto como el siguiente.

var BaseObject = function(){

var base = this;
base.prop;

base.setProp = function(val){
    base.prop = val;
}
}

Cuando llamo alsetProp Método, me sale lo siguiente.

var a = new BaseObject();
var b = new BaseObject();           

a.setProp("foo");
b.setProp("bar");

console.log(a.prop); // outputs 'foo'
console.log(b.prop); // outputs 'bar'

Entonces creé otro objeto que hereda deBaseObject Me gusta esto.

var TestObject = function(){
    // do something
}

TestObject.prototype = new BaseObject();

Cuando hago lo mismo, obtengo un resultado que no esperaba.

var a = new TestObject();
var b = new TestObject();

a.setProp("foo");
b.setProp("bar");

console.log(a.prop); // outputs 'bar'
console.log(b.prop); // outputs 'bar'

No se por que He estado leyendo mucho sobre cierres y herencia prototípica recientemente y sospecho que lo he confundido todo. Por lo tanto, cualquier sugerencia sobre por qué este ejemplo en particular funciona de la manera en que lo hace sería muy apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta