एक class Foo
की तरह बहुत एक new Foo
के रूप में एक ही प्रकार के ही नहीं है, वहाँ Foo
के लिए कोई भी ऐसे गुण Foo.prototype
को असाइन करने के लिए कोई कारण नहीं है। कारणों थोड़ा अलग हैं, लेकिन जावा की तरह किसी अन्य भाषा में यह विचार करें और यह स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं क्या सिर्फ काम नहीं करना चाहिए:
class Foo {
public String bar = "analogous to Foo.prototype.bar which is a property of Foo instances";
}
class Baz {
String thisMethodShouldAndWillFail() {
return Foo.bar;
}
String thisIsWhatShouldAndWillWork() {
return (new Foo()).bar;
}
}
जावास्क्रिप्ट में, आप क्या एक के अपने विचार को सही करने की जरूरत है प्रोटोटाइप यह है और यह वस्तुओं और रचनाकारों से कैसे संबंधित है, या आप निरंतर समस्याओं में भाग लेंगे। एक foo
एक प्रोटोटाइप है, लेकिन है कि प्रोटोटाइप नहींfoo.prototype
है। नहींfoo
की संपत्ति है जो इसका प्रोटोटाइप है। foo
के प्रोटोटाइप अपने निर्माताFoo
से निर्धारित होता है; यह इस तरह से अधिक समझ में आता है क्योंकि आप इसे बनाने के बाद foo.prototype
पर कोई पुराना मान असाइन कर सकते हैं, जो foo
को उस वर्ग के उदाहरण में बदलकर तोड़ देता है जिसके लिए इसे प्रारंभ नहीं किया गया था।
निर्माता Foo
इसी तरह कोई मतलब नहीं होता अगर यह वर्ग में परिभाषित करता है का एक उदाहरण के रूप में कार्य करेगा; इसे अपने आप में शामिल नहीं किया गया है, इसलिए यह सुरक्षित रूप से ग्रहण नहीं किया जा सकता है कि यह अपने उदाहरणों के लिए किए गए व्यवहार को पूरा करेगा। Foo
Function
का एक उदाहरण है, जो समझ में आता है क्योंकि इसे कहा जा सकता है। इसलिए प्रोटोटाइप Foo
Function.prototype
, Foo.prototype
नहीं है।
foo
के बीच संबंध और इसके प्रोटोटाइप को सेट किया जाता है जब आप foo = new Foo
पर कॉल करते हैं।चूंकि कन्स्ट्रक्टर Foo
के शरीर को उदाहरण शुरू करने की उम्मीद है, यह केवल समय है foo
इसके प्रोटोटाइप को समझ में आता है। प्रोटोटाइप एक वस्तु को अपने सामान्य व्यवहार प्रदान करता है, कन्स्ट्रक्टर ऑब्जेक्ट को प्रारंभ करता है ताकि ये व्यवहार इरादे के अनुसार काम करेंगे। प्रोटोटाइप जिसे foo
पर new Foo
के माध्यम से बनाया गया है, Foo.prototype
के अलावा कोई अन्य नहीं है; Foo
को सुविधा के लिए निष्पादित किया गया है और यह गारंटी है कि इसे संभवतः गड़बड़ नहीं किया जा सकता है। इसके बाद, के प्रोटोटाइप तक पहुंचने का कोई तरीका नहीं है, बिना Foo
स्पष्ट रूप से।
enter code here
केवल रचनाकार कार्यों में '.prototype' संपत्ति होती है, जिसका उपयोग तब किया जाता है जब आप उन्हें 'नया' कहते हैं। सभी ऑब्जेक्ट्स में * प्रोटोटाइप * होता है, लेकिन यह एक संपत्ति नहीं है। – Bergi