I持っている疑問、多分少し珍しい、関数のプロトタイプについては、このコードを見ると、コンソール出力表すコメント注意:理解関数プロトタイプと__proto__
function Foo() {
};
var o = Foo.prototype;
console.log(o.__proto__); // Object {}
console.log(o.constructor); // function Foo() {}
console.log(o.__proto__.constructor); // function Object() { [native code] }
console.log(o.__proto__.constructor === o.constructor); // false
をしてください私が標準getPrototypeOf()
の代わりに__proto__
を使用していることを無視してください。
最後の行がfalse
を印刷する理由を理解しようとしています。私たちは、通常、任意のは、以下の目的のために真実であることを知っている:
obj.__proto__.constructor === obj.constructor
が、これはo
があまりにもオブジェクトであるとして、上記o
の場合ではない理由を理解するために楽しみにしています。
o
が実際に関数のプロトタイプのインスタンス(Foo.prototype
)であるため、それはFoo
セットアップ中Foo
にo.constructor
セットを取得しますので、それは偽だのだろうか。
これはあまり実用的ではないかもしれないが、いくつかのことを理解することは有益です。
"*いつもどんなオブジェクトでも、以下のことが当てはまります:' obj .__ proto __。constructor === obj.constructor' * " - 独自の' .constructor'プロパティを持たないオブジェクト。 'Foo.prototype' *には' Foo'を指し示す独自の 'constructor'プロパティがあります。 – Bergi
@Bergiどのオブジェクトも 'constructor'プロパティを持っていると思います。 'constructor'プロパティを持つ' Object.prototype'から継承しています。あなたが何を意味しているか分かりませんが、ちょっとした詳細を喜ばせることができれば、それは役に立つでしょう、ありがとう。 –
私は自分のプロパティを、継承されたものは意味しませんでした。また、 'Object.prototype'を継承しないオブジェクトを作成することもできます。つまり、Object.create(null)の' "constructor"はfalseです) – Bergi