以下のようなオブジェクトを作成しました。
var BaseObject = function(){
var base = this;
base.prop;
base.setProp = function(val){
base.prop = val;
}
}
メソッドを呼び出すとsetProp
、次のようになります。
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'
次に、このように継承する別のオブジェクトを作成しましたBaseObject
。
var TestObject = function(){
// do something
}
TestObject.prototype = new BaseObject();
同じことをすると、予想していなかった結果が得られます。
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'
どうしてか分かりません。最近、クロージャーとプロトタイプの継承について多くのことを読んでいますが、すべて混乱していると思います。したがって、この特定の例がこのように機能する理由についての指針をいただければ幸いです。