1

(__proto__プロパティは、オブジェクトの実際のプロトタイプを指します。)

Object関数です(コンストラクターとしても使用されます)。

これは関数なので、コンストラクターは である必要がありますFunction

したがって、プロパティを に追加したい場合はObject、 に追加できFunction.prototypeます。

しかし、Functionはオブジェクトであり、すべてのオブジェクトObjectは何らかの方法で継承します。

これは実際に循環関係ですか?

私はこれを MDN ページで読みました:

(some function) ---> Function.prototype ---> Object.prototype ---> null

どのようnullにのことができます__proto__Object?またじゃないFunction.prototypeの?

4

2 に答える 2

0

これを読んだ後、この回答の図が質問に答えていると思います。

Javascript のすべてのオブジェクトに__proto__は、コンストラクターのプロトタイプ プロパティと同じプロパティがあります。そのため、オブジェクトのプロパティが見つからない場合は、それが__proto__見つかるか に到達するまで、そのプロパティを上方向に検索しますnull

Object.prototypeは、プロトタイプチェーンの終点Object.prototype.constructorですObject

Objectが関数であるという事実は、(として作成された可能性があるため)でObject.__proto__あることを意味します。Function.prototypeObjectnew Function()

しかし、Object.prototype.__proto__そうではありませんFunction.prototype

したがって、__proto__チェーンは次のようになりますFunction.prototype--> Object.prototype-->null

私はそれが正しかったことを願っています。

于 2012-12-25T16:57:07.343 に答える
-1

私の理解が正しければ、Function と Object が上位を占めています。関数はプロトタイプとしてオブジェクトを持ち、コンストラクタとしてのオブジェクトは実際には関数であるためです。

この種の相互依存性/継承は、完全な OO 言語では一般的であり、この (かなり単純な) 2 項目バージョンよりもはるかに複雑になる可能性があります。Ruby の継承図(美しいアスキー アートで表現されています!) を見て、それがいかに頭を悩ませているかを確認してください :)

良い点は、通常は心配する必要がないことです。Just Work™ である必要があります。

于 2012-12-13T10:49:52.750 に答える