2013-02-07 9 views
6

javascriptの言語固有の構造体 "prototype"に掘り下げたいと思っていました。 そして、ここに私の学習目的のコードは次のとおりです。コンストラクタの無限再帰を示すFirebug

var f = function() {}; 
f.ext = 1; 
f.prototype.pext = 2; 

私は放火犯で、今、このコードをデバッグするとき、私は次を得る: enter image description here

この無限のネスティングから来るん

? (= unterstood OK)の上から始めましょう:

F(OK)
- EXT(OK)
- プロトタイプ(OK)
- PEXT(OK)
- コンストラクタ(私がこだわっていますこの点)

誰のコンストラクタですか?そして、なぜ私たちはこのinfinte入れ子を持っていますか?

+0

匿名関数のプロトタイプは無名関数なので、それだと思います。関数のプロトタイプのプロパティを設定しているので、関数のプロトタイプのプロパティを設定している関数のプロトタイプにそのプロパティを設定します。わからない:) – Flauwekeul

答えて

5

単純にf === f.prototype.constructorなので、それらは同じで、Firebugはそれらを循環参照として示しています。

同じよう:ここにも

var a = {}, 
    b = a; 
a.b = b; 

あなたが表示されます無限の参照。

3

あなたはこの

Foo = function() { 
    // Do something 
}; 

を行うと、あなたはFooとしてこの

Foo.prototype.constructor == Foo 

を持っていますが、Fooのコンストラクタです:http://beej.us/blog/data/javascript-prototypes-inheritance/

var foo = new Foo(); // <-- Foo is the constructor. 

私はこの読書をお勧めします

関連する問題