function Entity() {
this.a = {a: 4};
this.b = 5;
}
function Thing() {}
Thing.prototype = new Entity;
var thing1 = new Thing;
thing1.a.a = 3;
thing1.b = 4;
var thing2 = new Thing;
console.log(thing2.a.a); // prints 3 instead of 4. I would like 4.
console.log(thing2.b) // prints 5 as wanted
javascriptでプロトタイプの継承を設定するのに問題があります。理想的には、thing1とthing2の両方に「新しいエンティティプロトタイプ」の独自のクリーンコピーを持たせたいと思います。
使用this.__proto__
は避けたいものです
[編集]
私はこれがどのように機能するかについて大まかな考えを持っています。
things1.bを設定すると、Thingインスタンスのbプロパティが設定されます。これは、プロトタイプチェーンで定義されたEntity.bには触れません。
一方、Thingインスタンスにthing1.aaを設定すると、「未定義に設定できません」というエラーがスローされるため、実行できません。そのとき、プロトタイプチェーンを上って、定義されているEntity.aを見つけ、Entity.aaを新しい値に設定します。
[さらに編集]
@IvoWetzelが言うように、プロパティの設定はプロトタイプチェーンに影響を与えないため、thing1.bの設定はプロトタイプチェーンに影響を与えません。一方、thing1.aaの設定は2つのステップを実行します。プロトタイプチェーンに接触するthing1.aのゲッターと、それに続く.aのセッター