Dlaczego moje właściwości obiektów JavaScript są nadpisywane przez inne instancje?
Stworzyłem obiekt jak poniżej.
var BaseObject = function(){
var base = this;
base.prop;
base.setProp = function(val){
base.prop = val;
}
}
Kiedy zadzwonię dosetProp
metoda, otrzymuję następujące.
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'
Następnie stworzyłem inny obiekt, który dziedziczy zBaseObject
lubię to.
var TestObject = function(){
// do something
}
TestObject.prototype = new BaseObject();
Kiedy robię to samo, otrzymuję wynik, którego nie oczekiwałem.
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'
Nie wiem dlaczego. Czytałem ostatnio wiele o zamknięciach i dziedziczeniu prototypów i podejrzewam, że wszystko to zostało zmieszane. Dlatego wszelkie wskazówki dotyczące tego, dlaczego ten konkretny przykład działa tak, jak powinny, zostałyby bardzo docenione.