मुझे लगता है कि आप जेएस से नहीं जानते हैं कि यह प्रोटोटाइप है: यह और ऑब्जेक्ट प्रोटोटाइप , जो डिजाइन को समझने और इतनी सारी भ्रांतियों को स्पष्ट करने के लिए एक अद्भुत पुस्तक है (इसीलिए मैं विरासत और जैसी चीजों का उपयोग करने से बचने की कोशिश कर रहा हूं instanceof
)।
लेकिन मेरे पास वही सवाल है जो लोग यहां पूछते हैं। कई उत्तर वास्तव में सहायक और ज्ञानवर्धक हैं। मैं अपनी समझ साझा करना पसंद करूंगा।
एक प्रोटोटाइप क्या है?
जावास्क्रिप्ट में वस्तुओं में एक आंतरिक गुण होता है, जिसे विनिर्देशन में निरूपित किया जाता है [[Prototype]]
, जो किसी अन्य वस्तु के लिए एक संदर्भ है। लगभग सभी वस्तुओं को null
उनके निर्माण के समय इस संपत्ति के लिए एक गैर- मूल्य दिया जाता है ।
किसी वस्तु का प्रोटोटाइप कैसे प्राप्त करें?
के माध्यम से __proto__
याObject.getPrototypeOf
var a = { name: "wendi" };
a.__proto__ === Object.prototype // true
Object.getPrototypeOf(a) === Object.prototype // true
function Foo() {};
var b = new Foo();
b.__proto__ === Foo.prototype
b.__proto__.__proto__ === Object.prototype
क्या है prototype
?
prototype
किसी ऑब्जेक्ट को किसी फ़ंक्शन की विशेष संपत्ति के रूप में स्वचालित रूप से बनाया जाता है , जिसका उपयोग प्रतिनिधिमंडल (इनहेरिटेंस) श्रृंखला, उर्फ अनुकूलन श्रृंखला को स्थापित करने के लिए किया जाता है।
जब हम एक समारोह बनाने a
, prototype
स्वचालित रूप से पर एक विशेष संपत्ति के रूप में बनाई गई है a
और के रूप में पर समारोह कोड की बचत होती है constructor
पर prototype
।
function Foo() {};
Foo.prototype // Object {constructor: function}
Foo.prototype.constructor === Foo // true
मैं इस संपत्ति को फ़ंक्शन ऑब्जेक्ट के गुणों (विधियों सहित) को संग्रहीत करने के स्थान के रूप में विचार करना पसंद करूंगा। यही कारण है कि जेएस में उपयोगिता कार्यों को परिभाषित किया जाता है Array.prototype.forEach()
, जैसे Function.prototype.bind()
,Object.prototype.toString().
किसी फ़ंक्शन की संपत्ति पर जोर देने के लिए क्यों ?
{}.prototype // undefined;
(function(){}).prototype // Object {constructor: function}
// The example above shows object does not have the prototype property.
// But we have Object.prototype, which implies an interesting fact that
typeof Object === "function"
var obj = new Object();
तो, Arary
, Function
, Object
सभी कार्यों कर रहे हैं। मुझे यह स्वीकार करना चाहिए कि यह जेएस पर मेरी छाप को ताज़ा करता है। मुझे पता है कि फ़ंक्शन जेएस में प्रथम श्रेणी के नागरिक हैं लेकिन ऐसा लगता है कि यह कार्यों पर बनाया गया है।
बीच क्या अंतर है __proto__
और prototype
?
__proto__
एक संदर्भ अपनी संपत्ति को संदर्भित करने के लिए हर वस्तु पर काम करता [[Prototype]]
है।
prototype
किसी ऑब्जेक्ट को किसी फ़ंक्शन की विशेष संपत्ति के रूप में स्वचालित रूप से बनाया जाता है , जिसका उपयोग फ़ंक्शन ऑब्जेक्ट के गुणों (विधियों सहित) को संग्रहीत करने के लिए किया जाता है।
इन दोनों के साथ, हम मानसिक रूप से प्रोटोटाइप श्रृंखला का नक्शा तैयार कर सकते हैं। जैसे यह चित्र दिखाता है:
function Foo() {}
var b = new Foo();
b.__proto__ === Foo.prototype // true
Foo.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype // true
__proto__
अलग हैconstructor.prototype
?