2013-02-07 21 views
6

के लिए अनंत रिकर्सन दिखा रहा है मैं जावास्क्रिप्ट के भाषा विशिष्ट निर्माण "प्रोटोटाइप" में खोदना चाहता था। और यहाँ मेरे सीखने उद्देश्य कोड है: enter image description hereफायरबग कन्स्ट्रक्टर

इस अनंत नेस्टिंग कहाँ से आती है:

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

जब मैं फ़ायरबग के साथ अब इस कोड को डिबग, मैं निम्नलिखित मिल सकता है? के ऊपर से शुरू करते हैं (ठीक = unterstood):

च (OK)
- ext (OK)
- प्रोटोटाइप (OK)
- pext (OK)
- निर्माता (मैं पर अटक कर रहा हूँ इस बिंदु)

वह किसका कन्स्ट्रक्टर है? और हमारे पास यह infinte घोंसला क्यों है?

+0

मुझे लगता है कि ऐसा इसलिए है क्योंकि किसी अज्ञात फ़ंक्शन का प्रोटोटाइप एक अनाम कार्य है। चूंकि आप फ़ंक्शन के प्रोटोटाइप पर एक प्रॉपर्टी सेट कर रहे हैं, यह उस प्रॉपर्टी को फ़ंक्शन के प्रोटोटाइप पर सेट करता है जो फ़ंक्शन के प्रोटोटाइप पर एक प्रॉपर्टी सेट कर रहा है ... आदि। हालांकि यकीन नहीं है :) – Flauwekeul

उत्तर

5

इसकी वजह से f === f.prototype.constructor, वे वही हैं और फ़ायरबग उन्हें परिपत्र संदर्भ के रूप में दिखाता है।

एक ही रूप में:

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

आप देखेंगे अनंत यहाँ भी संदर्भ।

3

जब आप इस

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

करते तो आप इस

Foo.prototype.constructor == Foo 

Foo रूप Foo के लिए निर्माता है होगा: http://beej.us/blog/data/javascript-prototypes-inheritance/

:

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

मैं इस पढ़ने की सलाह देते हैं