2017-01-16 5 views
1

私は戻ってプロトタイプの継承をよりよく理解しようとしています。私はインスタンスの__proto__属性がコンストラクタ関数のprototypeオブジェクトを指していることを理解していますが、コンストラクタ関数の__proto__属性は何を指していますか?コンストラクタ関数の__proto__属性は、何を指していますか?

私は、コンストラクタ関数自体がFunctionのインスタンスであるため、Functionコンストラクタのprototypeオブジェクトを指していると仮定していましたが、以下は空の関数であることを示しています。

[編集] Ovidiu Dolhaが私の理解を確認したので、これは誰かに役立つかもしれません。

enter image description here

答えて

3

Example.__proto__exampleInstance.__proto__Exampleは、関数のインスタンスであるためであるExample.prototype

と同じであると同様に、Function.prototypeと同じになります。

最終的にはすべて、プロトタイプの継承の根拠となるObject.prototypeになります。

可能な場合は__proto__を使用しないでください。使用しないことをお勧めします。代わりに使用Object.getPrototypeOf()

+0

ありがとうございます。だから、私の前提は正しかったし、 'Example .__ proto__'が空の関数を返すという事実は、コンソールのクルークです。 – Undistraction

+0

さて、実際に 'Function.prototype'は空であると考えています。なぜなら、' Object.getOwnPropertyNames(Function.prototype) 'を使って見ると、いくつかの属性/メソッド。プロトタイプはこのように使用されます(つまり、コンストラクタで定義されているデータとメソッドの所有者です - この場合はFunction) –

+0

確かに、オブジェクトではなく関数でなければなりません。あなたはそれを呼び出さない。 – Undistraction

0

それがルートとして「オブジェクト」を見つける最後まで行く原型チェーンです。

はECMAScript 5.1仕様では、このようにそれを述べている:関数のプロトタイプオブジェクトのプロパティ15.3.4で

The value of the [[Prototype]] internal property of the Function prototype object is the standard built-in Object prototype object 

とオブジェクトのプロトタイプオブジェクト

The value of the [[Prototype]] internal property of the Object prototype object is null 
の15.2.4のプロパティで

あなたのコンソールでこれを試してください。

console.log(exampleInstance); 

Example 
attribute 
: 
"example" 
__proto__ 
: 
Object 
constructor 
: 
() 
__proto__ 
: 
Object 
__defineGetter__ 
: 
__defineGetter__() 
__defineSetter__ 
: 
__defineSetter__() 
__lookupGetter__ 
: 
__lookupGetter__() 
__lookupSetter__ 
: 
__lookupSetter__() 
constructor 
: 
Object() 
hasOwnProperty 
: 
hasOwnProperty() 
isPrototypeOf 
: 
isPrototypeOf() 
propertyIsEnumerable 
: 
propertyIsEnumerable() 
toLocaleString 
: 
toLocaleString() 
toString 
: 
toString() 
valueOf 
: 
valueOf() 
get __proto__ 
: 
__proto__() 
set __proto__ 
: 
__proto__() 
関連する問題