सबसे पहले, function Empty() {}
प्रतिनिधित्व V8 सामान है।
वी 8 में, Function.prototype
वस्तु Function.prototype.name
संपत्ति के मूल्य के रूप में "Empty
है ", तो मैं आप शायद क्रोम के डेवलपर कंसोल का उपयोग कर रहे लगता है, और यह इस तरह से फ़ंक्शन का नाम प्रदर्शित करता है।
समारोह वस्तुओं की name
संपत्ति, non-standard
(ECMA-262 का हिस्सा नहीं है) इसलिए हम कार्यान्वयन के बीच मतभेदों को देखते हैं।
अब, Function.prototype
एक समारोह, कि हमेशा undefined
वापस आती है और तर्क के किसी भी संख्या को स्वीकार कर सकते, लेकिन क्यों है? शायद बस स्थिरता के लिए, प्रत्येक अंतर्निर्मित construc टो के प्रोटोटाइप, उस तरह है Number.prototype
एक Number
वस्तु, Array.prototype
एक Array
वस्तु है, RegExp.prototype
एक RegExp
वस्तु है, और इतने पर ...
फर्क सिर्फ इतना है (उदाहरण के लिए, किसी भी समारोह वस्तु Function.prototype
के बीच और) वह यह है कि स्पष्ट रूप से Function.prototype
Object.prototype
से विरासत प्राप्त करता है।
ऐसा लगता है कि जावास्क्रिप्ट में ऑब्जेक्ट.प्रोटोटाइप से शुरू होता है, क्या मैं इसके बारे में सही हूं?
ठीक है, तुम सही Object.prototype
सबसे वस्तुओं के प्रोटोटाइप श्रृंखला के अंतिम वस्तु है, लेकिन ECMAScript 5 में, तुम भी वस्तुओं है कि कुछ भी (Object.prototype
बस की तरह है) से विरासत नहीं है बना सकते हैं कर रहे हैं, और एक और विरासत श्रृंखला के रूप में, उदाहरण के लिए:
var parent = Object.create(null),
child = Object.create(parent);
Object.prototype.isPrototypeOf(parent); // false
Object.getPrototypeOf(parent); // null
Object.getPrototypeOf(Object.prototype); // null
इस पहेली का उत्तर यह है कि फ़ंक्शन .__ proto __.__ proto__ === ऑब्जेक्ट.प्रोटोटाइप। लेकिन आप Function.constructor.prototype के माध्यम से वहां नहीं पहुंचेंगे, क्योंकि यह अपरिभाषित (या बिल्कुल सेट नहीं) पर सेट किया गया था। – Stefan
+1 मैं हमेशा कुछ समझाने का सबसे सरल तरीका सोचता हूं कि चित्र/आरेख खींचना और बात करना है। आरेख को जोड़ने के लिए धन्यवाद! –