JavaScript में prototype पर मेथड जोड़कर सभी इंस्टेंसेस के लिए शेयर्ड व्यवहार बनाएं। this कीवर्ड से इंस्टेंस वेरिएबल्स एक्सेस करें।
बुनियादी उदाहरण
function Customer(fullName) {
this.fullName = fullName; // इंस्टेंस प्रॉपर्टी
}
// प्रोटोटाइप पर मेथड जोड़ें (सभी इंस्टेंसेस शेयर करते हैं)
Customer.prototype.setFullName = function(newFullName) {
this.fullName = newFullName; // this = वर्तमान इंस्टेंस
};
Customer.prototype.getFullName = function() {
return this.fullName;
};
// उपयोग
const customer = new Customer("John Smith");
console.log("सिंपल मेथड:", customer.fullName); // "John Smith"
console.log("प्रोटोटाइप मेथड:", customer.getFullName()); // "John Smith"
customer.setFullName("David Miller");
console.log("बदलने के बाद:", customer.getFullName()); // "David Miller"
प्रोटोटाइप चेन समझें
console.log(customer.__proto__ === Customer.prototype); // true
console.log(Customer.prototype.constructor === Customer); // true
// प्रोटोटाइप पर प्रॉपर्टी (शेयर्ड)
Customer.prototype.company = "TechCorp";
const c1 = new Customer("A");
const c2 = new Customer("B");
console.log(c1.company); // "TechCorp"
console.log(c2.company); // "TechCorp"
c1.company = "Startup"; // इंस्टेंस पर नई प्रॉपर्टी बनाता है (शैडोइंग)
console.log(c1.company); // "Startup"
console.log(c2.company); // "TechCorp" (प्रोटोटाइप से)
ES6 क्लास सिंटैक्स (समान व्यवहार)
class Customer {
constructor(fullName) {
this.fullName = fullName;
}
// यह मेथड प्रोटोटाइप पर जाता है
setFullName(newFullName) {
this.fullName = newFullName;
}
getFullName() {
return this.fullName;
}
// स्टेटिक मेथड (प्रोटोटाइप पर नहीं)
static createGuest() {
return new Customer("Guest");
}
}
const c = new Customer("John");
console.log(c.getFullName()); // "John"
चलाने का तरीका
node prototype-demo.js
आउटपुट
सिंपल मेथड = John Smith
प्रोटोटाइप मेथड = David Miller
महत्वपूर्ण अवधारणाएं
| अवधारणा | विवरण |
|---|---|
this | वर्तमान इंस्टेंस को संदर्भित करता है |
prototype | सभी इंस्टेंसेस द्वारा शेयर्ड ऑब्जेक्ट |
| मेथड परिभाषा | Constructor.prototype.method = fn |
| विरासत | Child.prototype = Object.create(Parent.prototype) |
बेस्ट प्रैक्टिस
- मेथड्स को प्रोटोटाइप पर रखें (मेमोरी कुशल)
- प्रति-इंस्टेंस डेटा के लिए
this.propउपयोग करें - ES6
classसिंटैक्स पसंद करें (अधिक पठनीय) - एरो फंक्शन प्रोटोटाइप मेथड्स के लिए न उपयोग करें (this बाइंडिंग)