たとえば、コードが持っている
object1:
__proto__: (is ref into an Animal.prototype object)
constructor: function Animal()
name: "animal"
__proto__: Object (is ref into an Object.prototype object)
object2:
__proto__: (is ref into an Dog.prototype object)
constructor: function Dog()
name: "dog"
__proto__: (is ref into an Animal.prototype object)
constructor: function Animal()
name: "animal"
__proto__: (is ref into an Object.prototype object)
あなたは(たとえば)次のコードを実行します。
何が起こっ
alert(object1.name); // displayed "animal"
alert(object2.name); // displayed "dog"
? 1)Javascriptは、オブジェクトインスタンス内のプロパティ名(object1
またはobject2
)を探しました。 2)見つからない場合は、オブジェクトインスタンスprotoプロパティ(これはクラス関数のプロトタイプと同じです)で検索しました。 3)おしゃべりしていないときprotoprotoと次と次は見つからない間name
プロパティと他protoが見つかりました。検索プロパティの結果として見つかった場合は、値が返され、見つからなければundefined
が返されます。
object2:
name: "doggy"
__proto__: (is ref into an Dog.prototype object)
constructor: function Dog()
name: "dog"
__proto__: (is ref into an Animal.prototype object)
constructor: function Animal()
name: "animal"
__proto__: (is ref into an Object.prototype object)
プロパティを直接インスタンスオブジェクトに割り当てられていますが、プロトタイプオブジェクトは変更されません:あなたはobject2はのために持っている結果
object2.name = "doggy";
:あなたは、次のコードを実行した場合に何が起こった
。そして、あなたが実行したとき:|: 1)
Animal.prototype.secondName="aaa";
alert(object1.secondName); // displayed "aaa"
alert(object2.secondName); // displayed "aaa"
Animal.prototype.secondName="bbb";
alert(object1.secondName); // displayed "bbb"
alert(object2.secondName); // displayed "bbb"
// but
Animal.prototype.secondName="ccc";
object1.secondName="ddd";
alert(object1.secondName); // displayed "ccc"
alert(object2.secondName); // displayed "ddd"
2)
alert(object1.name); // displayed "animal"
alert(object2.name); // displayed "doggy"
は、作成する必要がある場合は変更は、あなたが次のalgoritmsからいずれかを使用することができ、クラスの財産を共有しましたファンクションクラスのプロトタイプにタイプobject
のプロパティを作成し、このオブジェクトのプロパティに値を割り当てます。
Animal.prototype.propObject={thirdName:"zzz"};
alert(object1.propObject.thirdName); // displayed "zzz"
alert(object2.propObject.thirdName); // displayed "zzz"
Animal.prototype.propObject.thirdName="yyy";
alert(object1.propObject.thirdName); // displayed "yyy"
alert(object2.propObject.thirdName); // displayed "yyy"
object1.propObject.thirdName="xxx";
alert(object1.propObject.thirdName); // displayed "xxx"
alert(object2.propObject.thirdName); // displayed "xxx"
object2.propObject.thirdName="www";
alert(object1.propObject.thirdName); // displayed "www"
alert(object2.propObject.thirdName); // displayed "www"
オハイは、私がそれを再割り当てしない限り、継承されたプロパティを参照するので、一度私はそれ自身のプロパティに割り当てられますか? – rubixibuc
私は今それを得ました、そのダイアグラムは多くの助けになりました、ありがとう、あなたの答えは素晴らしかったです:-) – rubixibuc
@rubixibuc、右、それを割り当てたら、それは自分のプロパティになり、プロトタイプチェーンで。例えば、 'object1'と' object2'を作成した後に '[[Prototype]]'リンクを変更することはできません。 'derived.prototype'に別のオブジェクトを再割り当てしても影響はありませんそれらの2つのオブジェクトによって継承されたプロパティ – CMS