28

次の JavaScript コードは、私にとって非常に紛らわしいものです。誰でも私が理解するのを手伝ってくれませんか。PersonY にプロトタイプ プロパティがないのはなぜですか。

PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
​
4

2 に答える 2

37
PersonX = function(){};

無名関数への参照を に配置しPersonXます。PersonX関数を指します。

PersonY = new function(){};

匿名コンストラクタ関数の新しく構築されたインスタンスへの参照を に配置しますPersonYPersonYオブジェクトを指します。


試作品については、PersonY1つ持っています。ただし、コンストラクターにはインスタンス化の前後にプロパティとメソッドが関連付けられていないため空白プロトタイプ*があります。

を実行すると、実際にPersonYのプロトタイプを確認できconsole.log(PersonY)ます。__proto__「空白」のプロトタイプ プロパティ (Chrome のように表示されます) があることがわかります。ただしconstructor、オブジェクトを作成したコンストラクター関数である 2 つの隠しプロパティと、オブジェクトで__proto__ある次の「チェーン リンク」に導くもう 1 つのプロパティがありObjectます。

※試作品はチェーンなので、真っ白ではありません。このプロトタイプ レベルは空白の場合がありますが、次の上位のプロトタイプにはプロパティとメソッドがある場合があります。この場合、プロパティとメソッドがあります。

Object prototype -> Constructor prototype -> Your Instance will have:
- toString()        - blank                  - toString()
- hasOwnProperty()                           - hasOwnProperty()
- and more...                                - and more...
                                             - ...but nothing from Constructor
于 2012-05-11T19:09:01.287 に答える
0

これは、実際には関数のコピーとしてメモリ内でインスタンス化されたオブジェクトであるためです。プロトタイプは、実際にはインスタンスの作成のコンテキストでのみ意味を持ちます。したがって、一度作成されると、それが何を意味するかについての論理的な構成はありません。

于 2012-05-11T19:10:44.627 に答える