Warum werden meine JavaScript-Objekteigenschaften von anderen Instanzen überschrieben?

Ich habe ein Objekt wie das folgende erstellt.

var BaseObject = function(){

var base = this;
base.prop;

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

Wenn ich die anrufesetProp Methode bekomme ich folgendes.

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'

Ich habe dann ein anderes Objekt erstellt, von dem erbtBaseObject so was.

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

TestObject.prototype = new BaseObject();

Wenn ich das gleiche mache, erhalte ich ein Ergebnis, das ich nicht erwartet hatte.

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'

Ich weiß nicht warum. Ich habe in letzter Zeit viel über Schließungen und prototypische Vererbung gelesen und ich vermute, dass ich alles durcheinander gebracht habe. Es wäre daher sehr dankbar, wenn Sie Hinweise geben würden, warum dieses Beispiel so funktioniert, wie es funktioniert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage