ドキュメントは明確です:
指定されたプロトタイプオブジェクトとプロパティを使用して新しいオブジェクトを作成します。
新しいオブジェクトのプロトタイプもそうTest
なります。すべてのインスタンスは同じプロトタイプを参照し、オブジェクトと同様に、このプロトタイプへの参照も共有します。options
関係は次のようになります。
+------------+ +---------+ +--------+
| Instance 1 |----->| Test | | Object |
+------------+ | | | |
| options-|------>| name |
| name | +--------+
+---------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
さて、options
オブジェクトと同様に、それに新しいプロパティを割り当てると、次のようになります。
instance1.object.name2 = 'bar';
実際にアクセスして Test.options
います。結果は次のようになります。
+------------+ +---------+ +--------+
| Instance 1 |----->| Test | | Object |
+------------+ | | | |
| options-|------>| name |
| name | | name2 |
+---------+ +--------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
ただし、に新しい値を割り当てると、そのインスタンスでname
新しいプロパティname
が作成されます。だからあなたがするとき:
instance1.name = 'bar';
結果は次のようになります
+------------+ +---------+ +--------+
| Instance 1 |----->| Test | | Object |
| | | | | |
| name | | options-+------>| name |
+------------+ | name | +--------+
+---------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
options
のプロパティにアクセスしたり、プロパティを割り当てたりする代わりに、新しい値を割り当てた場合も同じことが起こります。
instance1.options = {name: 'another name'};
結果:
+--------+
| Object |
| |
| name |
+--------+
^
+------------+ | +---------+ +--------+
| Instance 1 |--+-->| Test | | Object |
| | | | | | |
| options----+--+ | options-|------>| name |
+------------+ | name | +--------+
+---------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
プロパティルックアップがどのように機能するかにより、プロトタイプチェーンでinstance1.options
最も近い(最も近い)プロパティの値を返します。またはインスタンスでoptions
設定すると、プロトタイプ()の値ではなく、それらの値が返されます。name
options
Test