लघु संस्करण:
हाँ: प्रोटोटाइप श्रृंखला की स्थापना नहीं की जा सकती या संशोधित करने के लिए एक बताए द्वारा ऑब्जेक्ट की prototype
संपत्ति। आप एक वस्तु को शाब्दिक वस्तु के साथ बनाकर विरासत स्थापित नहीं कर सकते हैं और फिर इसे prototype
नामक एक संपत्ति दे सकते हैं। इस तरह की संपत्ति को prototype
कहा जाएगा, लेकिन प्रोटोटाइप विरासत के लिए विचार नहीं किया जाएगा।
लंबे समय तक:
आप एक संपत्ति है कि है undefined
, उस वस्तु की विरासत श्रृंखला चेक किया गया है का उपयोग करते हैं। इसलिए, यदि obj['prop']
undefined
है, तो obj.prototype['prop']
चेक किया जाएगा। कई ब्राउज़रों में, prototype
संपत्ति आंतरिक रूप से __proto__
संपत्ति के रूप में कार्यान्वित की जाती है, लेकिन यह बिंदु के अलावा है। इसके बजाय, बिंदु यह है कि अगर कुछ संपत्ति undefined
है, तो उस संपत्ति के लिए ऑब्जेक्ट का प्रोटोटाइप चेक किया गया है।
के रूप में लोगों को टिप्पणी में कहा है, यह एक प्रोटोटाइप है कि एक समारोह के prototype
संपत्ति के लिए उस वस्तु बताए और फिर एक निर्माता के रूप में है कि फ़ंक्शन का उपयोग करके ऊपर-वर्णित विरासत प्रदान करता है के साथ एक वस्तु प्रदान करने ही संभव है।
लेकिन, prototype
कन्स्ट्रक्टर इनोकेशन द्वारा उत्पादित किसी ऑब्जेक्ट की संपत्ति object.hasOwnProperty('prototype')
नहीं है। दूसरी तरफ, यदि आप किसी ऑब्जेक्ट में prototype
प्रॉपर्टी असाइन करते हैं, तो वह ऑब्जेक्ट object.hasOwnProperty('prototype')
होगा, लेकिन फिर object.prototype
प्रोटोटाइप श्रृंखला से कोई लेना-देना नहीं होगा-यह केवल एक नियमित संपत्ति होगी, और prototype
पर कॉल करने के लिए किया जाएगा ।
इस प्रदर्शन करने के लिए:
var foo = {};
foo.prototype = {bar: 'hello'};
console.log(foo.bar); // undefined
console.log(foo.prototype); // Object {bar: "hello"}
console.log(foo.hasOwnProperty('prototype')); // true
var Foo = function() {};
Foo.prototype = {bar: 'hello'};
var f = new Foo;
console.log(f.bar); // 'hello';
console.log(f.hasOwnProperty('bar')); // false
console.log(f.prototype); // undefined
console.log(f.hasOwnProperty('prototype')); // false
स्रोत
2013-03-08 19:47:03
आप किसी मौजूदा ऑब्जेक्ट के प्रोटोटाइप को बदल सकते हैं नहीं या जब एक वस्तु शाब्दिक का उपयोग कर प्रोटोटाइप निर्दिष्ट करते हैं, तो, अगर मैं आपके सवाल का सही ढंग से समझ, मैं हाँ कहेंगे। –
तो यह अधिकांश ब्राउज़र व्यवहार को संदर्भित करेगा (फ़ायरफ़ॉक्स जैसे कुछ को छोड़कर जो "__proto__" लिंकिंग को सेट करने की अनुमति देता है) ... तो क्या कोई कह सकता है कि विरासत ऑब्जेक्ट शाब्दिक का उपयोग करके कार्यान्वित किया जा सकता है (लेकिन केवल ब्राउज़र में जो __proto__ को सेट करने की अनुमति देता है लिंक, फ़ायरफ़ॉक्स की तरह)? – testndtv
ऑब्जेक्ट लिटलल्स स्वयं 'ऑब्जेक्ट.प्रोटोटाइप' से प्राप्त होते हैं, इसलिए आपको अभी भी विरासत मिल रही है, लेकिन आप वर्तमान में रचनाकारों के साथ शाब्दिक वाक्यविन्यास का उपयोग करते समय उस समय से अधिक प्रोटोटाइप श्रृंखला स्थापित नहीं कर सकते हैं। और रचनाकार एकमात्र रास्ता नहीं हैं। आप इसके बजाय 'Object.create' का उपयोग कर सकते हैं। –