3

javascript の背後にあるプロトタイプをよりよく理解しようとして、次のことに遭遇しましたが、これまでのところ意味がわかりません。

関数がファースト クラス オブジェクトであることは理解していますが、Function.prototype でプロパティを設定した後に Object がこのプロパティを取得する理由がわかりません。

Function.prototype.foo = 'bar';

Object.foo // Object now has this property and returns 'bar'

Object.foo === Function.prototype.foo // returns true
4

3 に答える 3

3

Object関数でtypeof Object == 'function'あり、trueです。したがって、のプロパティを割り当てると、もそのプロパティを持つFunction.prototypeようにObjectなります。(プロパティチェーン内。)

于 2012-07-10T02:05:09.253 に答える
2

私が間違っていなければ、 Function.prototype は継承されたすべてのオブジェクトのプロトタイプです。すべてのオブジェクトがプロパティFunction.prototype.foo = 'bar';を継承するように設定しているためです。fooそのため、コードの 3 行目は true を返します。

于 2012-07-10T02:00:56.060 に答える
1

これはObject、オブジェクトが同じ内部プロパティFunctionを共有しているためです。[[Prototype]]

Ecma-262が言うように:

Function プロトタイプ オブジェクトの内部 [[Prototype]] プロパティの値は、Object プロトタイプ オブジェクトです。

したがって、Functionのプロトタイプにプロパティを追加すると、そのプロパティはObjectオブジェクトからもアクセスできるようになり、その逆も同様です。

深く理解したい場合は、Ecma-262 Specificationを参照することをお勧めします。

それが役に立てば幸い。

于 2012-07-10T02:21:47.103 に答える