2014-06-13 4 views
5

परिभाषित किया गया है, ठीक है, हर बार मुझे लगता है कि प्रोटोटाइप संपत्ति सभी वस्तुओं पर मौजूद है। लेकिन नौकरी साक्षात्कार में से एक के बाद मैं घर आया और क्रोम कंसोल खोल गयाजहां 'प्रोटोटाइप' संपत्ति को

window.prototype 
**undefined** 

डब्ल्यूटीएफ?

Object.prototype 
**Object {}** 

ठीक

var a = {}; 
a.prototype 
**undefined** 

var a = function(){} 
a.prototype 
**Object {}** 

मैं https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype कई बार स्पष्ट नहीं पढ़ा है, लेकिन अभी भी। क्या कोई समझा सकता है?

थैंक्स

पीएस https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype

जावास्क्रिप्ट में सभी ऑब्जेक्ट ऑब्जेक्ट से निकले हैं; सभी वस्तुओं Object.prototype से तरीकों और गुण के वारिस हैं, हालांकि वे (ओवरराइड किया जा सकता एक अशक्त प्रोटोटाइप के साथ एक वस्तु को छोड़कर, यानी Object.create (शून्य)

खिड़की वस्तु है, इसलिए यह प्रोटोटाइप होना आवश्यक है संपत्ति

उत्तर

7

वस्तु एक उदाहरण से, अपने प्रोटोटाइप विरासत, एक आंतरिक संपत्ति में संग्रहीत है, [[Prototype]]। इसका मान Object.getPrototypeOf() के साथ प्राप्त किया जा सकता है (ES5 संगत इंजन में)।

console.log(Object.getPrototypeOf(window)); 
// Window { ... } 

var a = {}; 
console.log(Object.getPrototypeOf(a)); 
// Object { ... } 

केवल function रों स्पष्ट रूप से एक prototype property है:

console.log(typeof Object); 
// 'function' 

और, prototype का मूल्य सिर्फ जब एक new उदाहरण बनाई गई है उदाहरण के [[Prototype]] का मान सेट किया जाता है।

function Foo() {} 
var bar = new Foo(); 

console.log(Foo.prototype === Object.getPrototypeOf(bar)); // true 
+1

और प्रोप्रोटाइप नोटेशन द्वारा एक्सेस के बारे में क्या? मुझे लगता है, Object.getPrototype वापसी के बाद ._proto_ संपत्ति नहीं है? –

+1

@ वासिलवंचुक, myObject .__ proto__ पुराने ब्राउज़र में Object.getPrototypeOf (myObject) जैसा ही है, लेकिन इसे बहिष्कृत किया गया है। Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto –

+1

@VasilVanchuk 1) 'फ़ंक्शन के पास केवल' प्रोटोटाइप 'संपत्ति है इसलिए उदाहरण ऑब्जेक्ट से प्राप्त होता है कन्स्ट्रक्टर के बजाय ही। लेकिन, किसी ऑब्जेक्ट को किसी अन्य प्रोटोटाइप (['Object.create()'] (http://ecma-international.org/ecma-262/5.1/#sec-15.2.3.5) के प्रोटोटाइप के रूप में उपयोग किया जा सकता है), इसलिए 'प्रोटोटाइप 'संपत्ति अन्यथा आवश्यक नहीं है और आमतौर पर नहीं मिलेगी। 2) और, हाँ, 'getPrototypeOf() 'और' __proto__' समान मूल्य प्रदान करेगा। लेकिन, '__proto__' गैर मानक है और कुछ सहायक ब्राउज़रों में इसे हटा दिया गया है। –

संबंधित मुद्दे