यह 5 चीजें करता है:
- यह एक नई वस्तु बनाता है। इस ऑब्जेक्ट का प्रकार केवल ऑब्जेक्ट है ।
- यह इस नए ऑब्जेक्ट की आंतरिक, दुर्गम, [[प्रोटोटाइप]] (यानी __proto__ ) को सेट करता है जो कि कंस्ट्रक्टर फ़ंक्शन की बाहरी, सुलभ, प्रोटोटाइप ऑब्जेक्ट (प्रत्येक फ़ंक्शन ऑब्जेक्ट में स्वचालित रूप से एक प्रोटोटाइप संपत्ति) हो।
- यह
this
नए बनाए गए ऑब्जेक्ट के लिए चर बिंदु बनाता है ।
- यह जब भी
this
उल्लेख किया जाता है, तब नई बनाई गई वस्तु का उपयोग करते हुए, कंस्ट्रक्टर फ़ंक्शन को निष्पादित करता है।
- यह नई बनाई गई वस्तु लौटाता है, जब तक कि कंस्ट्रक्टर फ़ंक्शन एक गैर-
null
ऑब्जेक्ट संदर्भ नहीं देता है। इस स्थिति में, उस ऑब्जेक्ट संदर्भ को इसके बजाय लौटा दिया जाता है।
नोट: कंस्ट्रक्टर फ़ंक्शनnew
कीवर्ड के बाद फ़ंक्शन को संदर्भित करता है , जैसे कि
new ConstructorFunction(arg1, arg2)
एक बार यह हो जाने के बाद, यदि नई वस्तु की अपरिभाषित संपत्ति का अनुरोध किया जाता है, तो स्क्रिप्ट वस्तु की [[प्रोटोटाइप]] वस्तु के बदले वस्तु की जांच करेगी । यह है कि आप जावास्क्रिप्ट में पारंपरिक वर्ग विरासत के समान कुछ प्राप्त कर सकते हैं।
इसके बारे में सबसे कठिन हिस्सा बिंदु संख्या 2 है। प्रत्येक वस्तु (कार्यों सहित) में यह आंतरिक गुण होता है जिसे [[प्रोटोटाइप]] कहा जाता है । इसे केवल ऑब्जेक्ट क्रिएशन के समय पर सेट किया जा सकता है, या तो नए के साथ , Object.create के साथ , या शाब्दिक (फ़ंक्शन के लिए डिफ़ॉल्ट रूप से कार्य करता है), संख्याओं से संख्या। संख्या, आदि। इसे केवल Object.getPrototypOf (someObject) के साथ पढ़ा जा सकता है । इस मान को सेट या पढ़ने का कोई अन्य तरीका नहीं है ।
छिपी [[प्रोटोटाइप]] संपत्ति के अलावा, फ़ंक्शंस में भी एक संपत्ति होती है, जिसे प्रोटोटाइप कहा जाता है , और यह है कि आप जिन वस्तुओं को बनाते हैं, उनके लिए विरासत में मिली संपत्ति और तरीके प्रदान कर सकते हैं।
यहाँ एक उदाहरण है:
ObjMaker = function() {this.a = 'first';};
// ObjMaker is just a function, there's nothing special about it that makes
// it a constructor.
ObjMaker.prototype.b = 'second';
// like all functions, ObjMaker has an accessible prototype property that
// we can alter. I just added a property called 'b' to it. Like
// all objects, ObjMaker also has an inaccessible [[prototype]] property
// that we can't do anything with
obj1 = new ObjMaker();
// 3 things just happened.
// A new, empty object was created called obj1. At first obj1 was the same
// as {}. The [[prototype]] property of obj1 was then set to the current
// object value of the ObjMaker.prototype (if ObjMaker.prototype is later
// assigned a new object value, obj1's [[prototype]] will not change, but you
// can alter the properties of ObjMaker.prototype to add to both the
// prototype and [[prototype]]). The ObjMaker function was executed, with
// obj1 in place of this... so obj1.a was set to 'first'.
obj1.a;
// returns 'first'
obj1.b;
// obj1 doesn't have a property called 'b', so JavaScript checks
// its [[prototype]]. Its [[prototype]] is the same as ObjMaker.prototype
// ObjMaker.prototype has a property called 'b' with value 'second'
// returns 'second'
यह वर्ग की विरासत की तरह है क्योंकि अब, आपके द्वारा उपयोग की जाने वाली कोई भी वस्तु new ObjMaker()
'बी' संपत्ति को विरासत में मिली हुई प्रतीत होगी।
यदि आप उपवर्ग जैसा कुछ चाहते हैं, तो आप ऐसा करते हैं:
SubObjMaker = function () {};
SubObjMaker.prototype = new ObjMaker(); // note: this pattern is deprecated!
// Because we used 'new', the [[prototype]] property of SubObjMaker.prototype
// is now set to the object value of ObjMaker.prototype.
// The modern way to do this is with Object.create(), which was added in ECMAScript 5:
// SubObjMaker.prototype = Object.create(ObjMaker.prototype);
SubObjMaker.prototype.c = 'third';
obj2 = new SubObjMaker();
// [[prototype]] property of obj2 is now set to SubObjMaker.prototype
// Remember that the [[prototype]] property of SubObjMaker.prototype
// is ObjMaker.prototype. So now obj2 has a prototype chain!
// obj2 ---> SubObjMaker.prototype ---> ObjMaker.prototype
obj2.c;
// returns 'third', from SubObjMaker.prototype
obj2.b;
// returns 'second', from ObjMaker.prototype
obj2.a;
// returns 'first', from SubObjMaker.prototype, because SubObjMaker.prototype
// was created with the ObjMaker function, which assigned a for us
मैं इस विषय पर अंत में इस पृष्ठ को खोजने से पहले एक टन बकवास पढ़ता हूं , जहां यह अच्छा चित्र के साथ बहुत अच्छी तरह से समझाया गया है।