1

すべて、私はいつもオブジェクトの__proto__とプロパティに混乱していました。特に、プロトタイプの継承チェーンで、 という名前のオブジェクトがあり、コードが以下のようになっprototypeているとしましょう。test

test.add();//try to call a method name add.

私の理解では、検索の流れをデモするために図を描きます。しかし、それが正しいかどうかはわかりません。レビューにご協力ください。ありがとうございます。

ここに画像の説明を入力

Minko Gechev の回答に基づいて修正しました。

ここに画像の説明を入力

4

1 に答える 1

3

関数だけがprototypeプロパティを持ちますが、オブジェクトはすべてプロパティを持ち__proto__ます。

__proto__通常、プロパティを明示的に変更するのは得策ではありませんObject.create

次に例を示します。

function Person() {
}
var proto = { bar: 'baz' };
Person.prototype = proto;

このようにして、コンストラクター関数で作成したオブジェクトには、参照するプロパティPersonがあります__proto__proto

結論として、次のことが言えます。

プロトタイプ プロパティは、コンストラクター関数でのみ使用さ__proto__れ、このコンストラクター関数で作成されるすべてのオブジェクトのプロパティを設定します。インタープリターが特定のオブジェクトのプロパティを探しているとき、foo最初にオブジェクトfooを使用し、その後foo.__proto__foo.__proto__.__proto__プロパティを見つけるかどうかを判断します。

于 2013-04-24T17:24:36.040 に答える