2017-03-19 5 views
1

私はいつもjavascriptの関数はオブジェクトで、Function.__proto__Object.prototypeと等しいと考えています。しかし、私がクロームコンソールに次のコードを入力したとき、出力は"Object .__ proto__ === Function.prototype"が "true"を返す

> Function.__proto__ === Object.prototype; 
> false 
> Object.__proto__ === Function.prototype; 
> true 

私は今非常に混乱しています。関数はオブジェクトから継承しますか?それとも別の方法ですか?

+0

http://stackoverflow.com/questions/9959727/proto-vs-prototype-in​​-javascript#9959753 –

+0

すべてのオブジェクトに '__proto__'が' Object.prototype'に設定されていると仮定しているようです。そうではありません。 – user2357112

+0

潜在的な回答を私に指摘してくれてありがとう。私は0x90で投稿を見ましたが、図では、 "Function .__ proto__ === Object.prototype"と表示されています。これは可能な場合は – Thor

答えて

1

Objectそのため、機能(あなたがnew Object()を使用することができます)です。

Object.__proto__ === Function.prototype // true 

同様に、Functionしたがって、機能(あなたがnew Function()を使用することができます)です。

Function.__proto__ === Function.prototype // true 

の場合すべての関数がオブジェクトなので、次のようになります。

-919-
+0

"Function"は "Object"ではなくプロトタイプチェーンの終わりなのでしょうか? – Thor

+0

@TonyStark:はい、 'Object .__ proto __.__ proto__'は' Object.prototype'なので、プロトタイプチェーン全体はObject→Functionです。 – Ryan

+0

いいえ、 'Function .__ proto __.__ proto__ === Object.prototype'。あなたは、 'Function'が持っている循環的な関係に気づいているだけです。 – 4castle

関連する問題