OOJS: ऑब्जेक्ट ओरिएंटेड Javaउदाहरण सहित स्क्रिप्ट ट्यूटोरियल

⚡ स्मार्ट सारांश

वस्तु के उन्मुख Javaस्क्रिप्ट वास्तविक दुनिया की संस्थाओं को ऐसे ऑब्जेक्ट के रूप में मॉडल करती है जिनमें गुण और विधियाँ होती हैं। यह पृष्ठ ऑब्जेक्ट लिटरल, कंस्ट्रक्टर फ़ंक्शन, प्रोटोटाइप, ES6 क्लास, इनहेरिटेंस और प्राइवेट फ़ील्ड के बारे में उदाहरणों के साथ बताता है जिन्हें आप चलाकर सत्यापित कर सकते हैं।

  • 🧱 वस्तुओं: एक ऑब्जेक्ट संबंधित गुणों और विधियों को एक साथ जोड़ता है ताकि एक ही वेरिएबल किसी छात्र, खाते या घर का मॉडल बना सके।
  • 🏗️ कंस्ट्रक्टर्स: एक कंस्ट्रक्टर फ़ंक्शन के साथ इसका एक ही पुन: प्रयोज्य ब्लूप्रिंट से कई इंस्टेंस बनाता है।
  • 🔁 गणना: for/in लूप प्रत्येक एन्यूमेबल प्रॉपर्टी को स्कैन करता है और नामों को हार्डकोड किए बिना कुंजी और मानों को प्रिंट करता है।
  • 📦 ES6 कक्षाएं: क्लास कीवर्ड एक सिंटैक्टिक शुगर है; मेथड अभी भी साझा प्रोटोटाइप ऑब्जेक्ट पर मौजूद हैं।
  • 🧬 विरासत: यह स्वचालित रूप से लिंक प्रोटोटाइप का विस्तार करता है, और सुपर पैरेंट कंस्ट्रक्टर या ओवरराइड किए गए मेथड को कॉल करता है।
  • 🔒 encapsulation: # से शुरू होने वाले फ़ील्ड निजी रहते हैं और Object.keys और JSON.stringify से छिपे रहते हैं।
  • ⚙️ अभ्यास: इस पृष्ठ पर दिए गए प्रत्येक उदाहरण में सत्यापित आउटपुट दिखाया गया है, ताकि आप सीखते समय परिणामों की तुलना कर सकें।

वस्तु के उन्मुख Javaऑब्जेक्ट, कंस्ट्रक्टर और क्लास के साथ स्क्रिप्ट (OOJS) की अवधारणाएँ

OOPS अवधारणा क्या है? Javaलिखी हुई कहानी?

कई बार, चर या सारणी वास्तविक जीवन की स्थितियों का अनुकरण करने के लिए पर्याप्त नहीं होते हैं। Javaस्क्रिप्ट आपको वास्तविक जीवन की वस्तुओं की तरह काम करने वाली वस्तुएं बनाने की अनुमति देती है। एक छात्र या घर ऐसी वस्तुएं हो सकती हैं जिनमें कई अनूठी विशेषताएं हों। प्रोग्रामिंग को आसान बनाने के लिए आप अपनी वस्तुओं पर गुण और विधियां बना सकते हैं। यदि आपकी वस्तु एक छात्र है, तो उसमें प्रथम नाम, अंतिम नाम और आईडी जैसी गुणधर्म और calculateRank या changeAddress जैसी विधियां होंगी। यदि आपकी वस्तु एक घर है, तो उसमें कमरों की संख्या, पेंट का रंग और स्थान जैसी गुणधर्म और calculateArea या changeOwner जैसी विधियां होंगी।

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में Javaइसलिए यह स्क्रिप्ट चार विचारों पर आधारित है जो आपको इस पृष्ठ पर मिलेंगे: समूहping स्टेट और बिहेवियर को एक ऑब्जेक्ट में समाहित करना, कंस्ट्रक्टर के माध्यम से ब्लूप्रिंट का पुन: उपयोग करना, प्रोटोटाइप के माध्यम से मेथड्स को साझा करना और आंतरिक डेटा तक सीधी पहुंच को प्रतिबंधित करना। यदि आप इस भाषा में नए हैं, तो इससे शुरुआत करें। परिचय Javaलिपि और फिर यहीं लौट आओ.

ऑब्जेक्ट कैसे बनाएं

आप इस प्रकार एक ऑब्जेक्ट बना सकते हैं:

var objName = new Object();
objName.property1 = value1;
objName.property2 = value2;
objName.method1 = function()
{
  // line of code
}

या, संक्षिप्त ऑब्जेक्ट लिटरल रूप का उपयोग करते हुए:

var objName = { property1: value1, property2: value2, method1: function()
{
  // lines of code
} };

ऑब्जेक्ट गुण और विधियों तक पहुँचें

आप डॉट नोटेशन का उपयोग करके किसी ऑब्जेक्ट की प्रॉपर्टी तक पहुंच सकते हैं, और आप कोष्ठक जोड़कर किसी मेथड को कॉल कर सकते हैं:

objectname.propertyname;   // read a property
objectname.methodname();   // call a method
objectname["propertyname"]; // bracket notation, useful for dynamic keys

इस उदाहरण को स्वयं आज़माएँ:

<html>
<head>
	<title>Objects!!!</title>
	<script type="text/javascript">
      var student = new Object();
      student.fName = "John";
      student.lName = "Smith";
      student.id = 5;
      student.markE = 76;
      student.markM = 99;
      student.markS = 87;
      student.calculateAverage = function()
      {
      	return (student.markE + student.markM + student.markS)/3;
      };
      student.displayDetails = function()
      {
        document.write("Student Id: " + student.id + "<br />");
        document.write("Name: " + student.fName + " " + student.lName + "<br />");
        var avg = student.calculateAverage();
        document.write("Average Marks: " + avg);
      };
		student.displayDetails();
	</script>
</head>
<body>
</body>
</html>

आउटपुट:

Student Id: 5
Name: John Smith
Average Marks: 87.33333333333333

💡टिप: ऊपर दिए गए उदाहरण में इसका उपयोग किया गया है। दस्तावेज़.लिखें क्योंकि यह इस पृष्ठ पर संपादक के अंदर चलता है। वास्तविक परियोजनाओं में, प्राथमिकता दें दिलासा देना डिबगिंग या DOM विधियों जैसे कि पाठ्य सामग्री, क्योंकि दस्तावेज़.लिखें लोडिंग पूरी होने के बाद जब इसे कॉल किया जाता है तो यह पेज को मिटा देता है।

ओओपीएस कंस्ट्रक्टर

एक-एक करके ऑब्जेक्ट बनाना उतना उपयोगी नहीं है, क्योंकि आपको हर छात्र के लिए एक ही कोड दोहराना होगा। यहीं पर ऑब्जेक्ट कंस्ट्रक्टर काम आता है। कंस्ट्रक्टर एक सामान्य फ़ंक्शन है जिसे कॉल किया जाता है। नई कीवर्ड; यह एक ऑब्जेक्ट प्रकार को परिभाषित करता है जिसे प्रत्येक व्यक्तिगत इंस्टेंस के लिए पुन: उपयोग किया जा सकता है।

कंस्ट्रक्टर के अंदर, इसका यह नए ऑब्जेक्ट के निर्माण को संदर्भित करता है, इसलिए प्रत्येक इंस्टेंस को पास किए गए मानों की अपनी प्रति प्राप्त होती है। संबंधित मान, जैसे कि चिह्न, अक्सर एक में संग्रहीत किए जाते हैं। सरणी ताकि उन्हें एक ही बार में कुल योग किया जा सके।

इस उदाहरण को स्वयं आज़माएँ:

<html>
<head>
	<script type="text/javascript">
		function Student(first, last, id, english, maths, science)
        {
          this.fName = first;
          this.lName = last;
          this.id = id;
          this.markE = english;
          this.markM = maths;
          this.markS = science;
          this.calculateAverage = function()
          {
         	 return (this.markE + this.markM + this.markS)/3;
          }
		  this.displayDetails = function()
		  {
            document.write("Student Id: " + this.id + "<br />");
            document.write("Name: " + this.fName + " " + this.lName + "<br />");
            var avg = this.calculateAverage();
            document.write("Average Marks: " + avg + "<br /><br />");
		  }
		}
        var st1 = new Student("John", "Smith", 15, 85, 79, 90);
        var st2 = new Student("Hannah", "Turner", 23, 75, 80, 82);
        var st3 = new Student("Kevin", "White", 4, 93, 89, 90);
        var st4 = new Student("Rose", "Taylor", 11, 55, 63, 45);
        st1.displayDetails();
        st2.displayDetails();
        st3.displayDetails();
        st4.displayDetails();
	</script>
</head>
<body>
</body>
</html>

आउटपुट:

Student Id: 15
Name: John Smith
Average Marks: 84.66666666666667

Student Id: 23
Name: Hannah Turner
Average Marks: 79

Student Id: 4
Name: Kevin White
Average Marks: 90.66666666666667

Student Id: 11
Name: Rose Taylor
Average Marks: 54.333333333333336

किसी ऑब्जेक्ट के गुणों के माध्यम से लूप करें

सिंटेक्स:

for (variablename in objectname)
{
  // lines of code to be executed
}

के लिए/में पाश इसका उपयोग आमतौर पर किसी ऑब्जेक्ट के गुणों को समझने के लिए किया जाता है। आप इसे कोई भी नाम दे सकते हैं। परिवर्तनशीललेकिन ऑब्जेक्ट का नाम पहले से मौजूद ऑब्जेक्ट से मेल खाना चाहिए। प्रत्येक पास पर, वेरिएबल प्रॉपर्टी को धारण करता है। कुंजी इसे एक स्ट्रिंग के रूप में लिखा जाता है, इसलिए मान को ब्रैकेट नोटेशन जैसे कि के साथ पढ़ा जाता है। कर्मचारी[x].

इस उदाहरण को स्वयं आज़माएँ:

<html>
<head>
	<script type="text/javascript">
		var employee={first:"John", last:"Doe", department:"Accounts"};
        var details = "";
        document.write("<b>Using for/in loops </b><br />");
        for (var x in employee)
        {
          details = x + ": " + employee[x];
          document.write(details + "<br />");
        }
	</script>
</head>
<body>
</body>
</html>

आउटपुट:

Using for/in loops
first: John
last: Doe
department: Accounts

दो बातें याद रखने योग्य हैं। एक फॉर/इन लूप प्रोटोटाइप श्रृंखला के माध्यम से विरासत में मिली गणना योग्य प्रॉपर्टीज़ को भी एक्सेस करता है, इसलिए एक गार्ड जैसे कि ऑब्जेक्ट.प्रोटोटाइप.हैज़ओनप्रॉपर्टी.कॉल(कर्मचारी, x) इसे अक्सर जोड़ा जाता है। साधारण डेटा ऑब्जेक्ट के लिए, ऑब्जेक्ट.कीज़(कर्मचारी) or ऑब्जेक्ट.एंट्रीज़(कर्मचारी) यह आमतौर पर अधिक स्पष्ट होता है, क्योंकि दोनों ही ऑब्जेक्ट के अपने गुणों को ही लौटाते हैं।

ES6 क्लास का सिंटैक्स क्या है? Javaलिखी हुई कहानी?

ECMAScript 2015, जिसे आमतौर पर ES6 कहा जाता है, ने निम्नलिखित सुविधाएँ जोड़ीं: कक्षा कीवर्ड। एक क्लास प्रोटोटाइप सिस्टम पर सिंटैक्टिक शुगर है जिसका उपयोग ऊपर दिए गए कंस्ट्रक्टर फ़ंक्शन द्वारा पहले से ही किया जाता है: कोई नया ऑब्जेक्ट मॉडल पेश नहीं किया गया है। चल रहा है छात्र का प्रकार किसी क्लास पर अभी भी "फ़ंक्शन" स्ट्रिंग वापस आती है, और क्लास बॉडी में लिखे गए प्रत्येक मेथड को इंस्टॉल किया जाता है। छात्र.प्रोटोटाइपजिसका अर्थ है कि सभी इंस्टेंस उस विधि की एक प्रति साझा करते हैं, बजाय इसके कि प्रत्येक ऑब्जेक्ट अपनी स्वयं की विधि ले जाए।

यह सिंटैक्स कुछ खामियों को भी दूर करता है। क्लास बॉडी हमेशा स्ट्रिक्ट मोड में एग्जीक्यूट होती है, बिना किसी क्लास को कॉल किए। नई यह ग्लोबल ऑब्जेक्ट को चुपचाप दूषित करने के बजाय एक TypeError उत्पन्न करता है, और गेटर्स, सेटर्स और स्टैटिक सदस्यों के लिए एक समर्पित स्थान होता है। इसका परिणाम यह होता है कि कोड छोटा हो जाता है लेकिन वही उद्देश्य व्यक्त करता है।

class Student {
  constructor(first, last, id, english, maths, science) {
    this.fName = first;
    this.lName = last;
    this.id = id;
    this.marks = [english, maths, science];
  }

  calculateAverage() {
    const total = this.marks.reduce((sum, m) => sum + m, 0);
    return total / this.marks.length;
  }

  displayDetails() {
    console.log("Student Id: " + this.id);
    console.log("Name: " + this.fName + " " + this.lName);
    console.log("Average Marks: " + this.calculateAverage().toFixed(2));
  }
}

const st1 = new Student("John", "Smith", 15, 85, 79, 90);
st1.displayDetails();
console.log(typeof Student);
console.log(st1.calculateAverage === Student.prototype.calculateAverage);

आउटपुट:

Student Id: 15
Name: John Smith
Average Marks: 84.67
function
true

अंतिम दो पंक्तियाँ इस बात को साबित करती हैं: क्लास अभी भी एक फ़ंक्शन है, और इंस्टेंस पर मौजूद मेथड वही फ़ंक्शन ऑब्जेक्ट है जो प्रोटोटाइप पर संग्रहीत है।

कंस्ट्रक्टर फ़ंक्शन बनाम ES6 क्लास

पहलू कंस्ट्रक्टर फ़ंक्शन ES6 क्लास
घोषणा फ़ंक्शन छात्र(…) { } क्लास स्टूडेंट { कंस्ट्रक्टर(…) { } }
विधि प्लेसमेंट फ़ंक्शन के अंदर असाइन किया गया है, इसलिए प्रत्येक इंस्टेंस को अपनी कॉपी मिलती है जब तक कि आप इसे लिखते नहीं हैं। छात्र.प्रोटोटाइप क्लास बॉडी में लिखा गया और प्रोटोटाइप पर स्वचालित रूप से रखा गया
बिना नए के कॉल करना चुपचाप चलता है और इसका अपरिभाषित है या वैश्विक वस्तु तुरंत एक TypeError उत्पन्न करता है
उत्थापन फ़ंक्शन घोषणाओं को होस्ट किया जाता है और परिभाषा से पहले उपयोग किया जा सकता है। मूल्यांकन होने तक अस्थायी गतिरोध में
सख्त मोड आसपास की स्क्रिप्ट का अनुसरण करता है हमेशा सख्त
विरासत मैनुअल: ऑब्जेक्ट.क्रिएट प्लस एक कॉल अभिभावक को फैली और सुपर
निजी डेटा क्लोजर या नामकरण परंपरा जैसे _संतुलन सच्चे निजी क्षेत्र के साथ #
अंतर्निहित मॉडल प्रोटोटाइप प्रोटोटाइप (रनटाइम पर समान)

extends और super का उपयोग करके इनहेरिटेंस को कैसे लागू करें

इनहेरिटेंस एक विशिष्ट प्रकार को अधिक सामान्य प्रकार के गुणों और विधियों का पुन: उपयोग करने की अनुमति देता है। ES6 से पहले, इसका मतलब था प्रोटोटाइप श्रृंखला को तीन अलग-अलग चरणों में मैन्युअल रूप से जोड़ना, और उनमें से एक को भूल जाना आसान था।

function Person(fName, lName) {
  this.fName = fName;
  this.lName = lName;
}

Person.prototype.introduce = function () {
  return "I am " + this.fName + " " + this.lName;
};

function Student(fName, lName, id) {
  Person.call(this, fName, lName);   // 1. borrow the parent constructor
  this.id = id;
}

Student.prototype = Object.create(Person.prototype); // 2. link the chain
Student.prototype.constructor = Student;              // 3. repair constructor

var st = new Student("Kevin", "White", 4);
console.log(st.introduce());
console.log(st instanceof Person);

आउटपुट:

I am Kevin White
true

RSI फैली कीवर्ड आपके लिए तीनों चरणों को पूरा करता है, और सुपर यह माता-पिता तक पहुंचने का एक स्पष्ट तरीका प्रदान करता है। इसके दो अलग-अलग उपयोग हैं। सुपर:

  • सुपर(…) एक कॉल के रूप में यह पैरेंट कंस्ट्रक्टर को चलाता है। यह केवल डिराइव्ड कंस्ट्रक्टर के अंदर ही मान्य है, और इसे आपके द्वारा किसी भी बदलाव से पहले चलना चाहिए। इसका अन्यथा ReferenceError उत्पन्न हो जाएगा।
  • सुपर.मेथड() क्योंकि प्रॉपर्टी लुकअप किसी मेथड के पैरेंट वर्जन को कॉल करता है जिसे चाइल्ड ने ओवरराइड किया है, इस तरह आप व्यवहार को बदलने के बजाय उसका विस्तार करते हैं।
class Person {
  constructor(fName, lName) {
    this.fName = fName;
    this.lName = lName;
  }

  introduce() {
    return "I am " + this.fName + " " + this.lName;
  }
}

class Student extends Person {
  constructor(fName, lName, id) {
    super(fName, lName);   // must run before "this" is used
    this.id = id;
  }

  introduce() {
    return super.introduce() + ", roll number " + this.id;
  }
}

const st = new Student("Hannah", "Turner", 23);
console.log(st.introduce());
console.log(st instanceof Student, st instanceof Person);
console.log(Object.getPrototypeOf(Student.prototype) === Person.prototype);

आउटपुट:

I am Hannah Turner, roll number 23
true true
true

तीसरी पंक्ति महत्वपूर्ण है। यह पुष्टि करती है कि फैली इसने मैन्युअल रूप से बनाए गए प्रोटोटाइप लिंक को हूबहू तैयार किया, इसलिए क्लास ने प्रोटोटाइप चेनिंग को प्रतिस्थापित नहीं किया। उन्होंने बस अनावश्यक कोड को छिपा दिया। जब किसी प्रॉपर्टी को पढ़ा जाता है stइंजन उस उदाहरण को देखता है, फिर छात्र.प्रोटोटाइप, तो व्यक्ति.प्रोटोटाइप, तो ऑब्जेक्ट.प्रोटोटाइपऔर पहले मिलान पर रुक जाता है; वह खोज पथ प्रोटोटाइप श्रृंखला है।

⚠️ चेतावनी: कभी भी असाइन न करें छात्र.प्रोटोटाइप = व्यक्ति.प्रोटोटाइपइससे दोनों प्रकार एक ही ऑब्जेक्ट साझा करते हैं, इसलिए आप चाइल्ड में जो भी मेथड जोड़ते हैं, वह पेरेंट में भी जुड़ जाता है। ऑब्जेक्ट.क्रिएट(पर्सन.प्रोटोटाइप)या बस उपयोग करें फैली.

प्राइवेट क्लास फ़ील्ड्स के साथ एनकैप्सुलेशन कैसे प्राप्त करें

एनकैप्सुलेशन का मतलब है रखनाping आंतरिक स्थिति आपकी पहुंच से बाहर है ताकि इसे केवल आपके नियंत्रण वाले तरीकों से ही बदला जा सके। वर्षों से। Javaस्क्रिप्ट डेवलपर्स ने इसे एक अग्रणी अंडरस्कोर के साथ नकली बना दिया, लेकिन एक नाम जैसे _संतुलन यह केवल एक परंपरा है और कोई भी कोड इसे ओवरराइट कर सकता है। आधुनिक Javaस्क्रिप्ट वास्तविक गोपनीयता प्रदान करती है: एक फ़ील्ड जिसका नाम इससे शुरू होता है # यह केवल उस क्लास बॉडी के अंदर ही सुलभ है जो इसे घोषित करती है।

निजी खेतों से तीन ठोस लाभ मिलते हैं:

  • इनका उपयोग करने से पहले इन्हें क्लास बॉडी में घोषित किया जाना चाहिए, जो टाइप की आंतरिक स्थिति को एक ही स्थान पर दस्तावेजित करता है।
  • वे अदृश्य हैं ऑब्जेक्ट.कुंजी, JSON.स्ट्रिंगिफ़ाईऔर for/in, ताकि आंतरिक स्थिति क्रमबद्ध आउटपुट में लीक न हो।
  • किसी क्लास के बाहर से किसी प्राइवेट फील्ड को छूना एक सिंटैक्स एरर है, जिसे कोड चलने से पहले ही पकड़ लिया जाता है, न कि यह कोई साइलेंट बग है।
class BankAccount {
  #balance = 0;

  constructor(owner, opening) {
    this.owner = owner;
    this.#balance = opening;
  }

  deposit(amount) {
    if (amount <= 0) {
      return "Deposit must be positive";
    }
    this.#balance += amount;
    return this.owner + " balance: " + this.#balance;
  }

  get balance() {
    return this.#balance;
  }
}

const acc = new BankAccount("John", 500);
console.log(acc.deposit(250));
console.log(acc.deposit(-40));
console.log("Read via getter: " + acc.balance);
console.log("Own keys: " + Object.keys(acc));
console.log("JSON: " + JSON.stringify(acc));

आउटपुट:

John balance: 750
Deposit must be positive
Read via getter: 750
Own keys: owner
JSON: {"owner":"John"}

शेष राशि कभी दिखाई नहीं देती ऑब्जेक्ट.कुंजी या JSON स्ट्रिंग में, और नकारात्मक जमा राशि को फ़ील्ड को दूषित करने के बजाय विधि द्वारा अस्वीकार कर दिया जाता है। बैलेंस प्राप्त करें() एक्सेसर एक रीड-ओनली व्यू को एक्सपोज करता है, जो निजी स्थिति को सुरक्षित रूप से प्रकाशित करने का सामान्य तरीका है।

अब जब ऑब्जेक्ट, प्रोटोटाइप, क्लास, इनहेरिटेंस और एनकैप्सुलेशन समझ में आ गए हैं, तो निर्माण जारी रखें। इन उदाहरणों के साथ बुनियादी बातों का अभ्यास करें। व्यावहारिक Javaस्क्रिप्ट कोड के उदाहरण, काम के माध्यम से इंटरैक्टिव Javaस्क्रिप्ट अभ्यासएल्गोरिदम पर क्लास लागू करें जैसे कि क्विकसॉर्ट में Javaलिपिआउटपुट को व्यवस्थित करें Javaस्क्रिप्ट स्ट्रिंग फ़ॉर्मेटिंगऔर देखें कि स्थिर ty कैसेping ऑब्जेक्ट डिज़ाइन में परिवर्तन TypeScript.

अक्सर पूछे जाने वाले प्रश्न

यह एक खाली ऑब्जेक्ट बनाता है, उसे कंस्ट्रक्टर प्रोटोटाइप से लिंक करता है, उस ऑब्जेक्ट से "this" को जोड़कर कंस्ट्रक्टर को चलाता है, और उसे वापस लौटाता है। यदि कंस्ट्रक्टर स्पष्ट रूप से कोई ऑब्जेक्ट लौटाता है, तो उसके बजाय वह मान लौटाया जाता है।

जब लॉजिक किसी एक इंस्टेंस के बजाय टाइप से संबंधित हो, जैसे कि JSON से ऑब्जेक्ट बनाने वाली फ़ैक्टरी या दो इंस्टेंस की तुलना करने वाला हेल्पर, तो स्टैटिक मेथड का उपयोग करें। स्टैटिक मेंबर्स को क्लास पर ही कॉल किया जाता है।

क्योंकि "this" का निर्धारण इस बात से होता है कि किसी मेथड को कैसे कॉल किया जाता है, न कि उसके लिखे होने के स्थान से। किसी मेथड को कॉलबैक के रूप में पास करने से रिसीवर गायब हो जाता है। इसे ठीक करने के लिए, मेथड को कंस्ट्रक्टर में बाइंड करें या इसे एरो फंक्शन के साथ क्लास फील्ड के रूप में घोषित करें।

नहीं। एक ही नाम से दो मेथड घोषित करने पर केवल अंतिम मेथड ही रखी जाती है। आर्गुमेंट्स.लेंथ की जांच करके, डिफ़ॉल्ट पैरामीटर मानों का उपयोग करके, या नामित गुणों के साथ एक एकल विकल्प ऑब्जेक्ट स्वीकार करके ओवरलोडिंग का अनुकरण करें।

हाँ। एआई कोडिंग सहायक उस रिफैक्टर को अच्छी तरह से संभालते हैं क्योंकि मैपping यह एक यांत्रिक प्रक्रिया है। परिणाम की हमेशा समीक्षा करें, क्योंकि सहायक कंस्ट्रक्टर के बाहर प्रोटोटाइप से जुड़ी विधियों को नज़रअंदाज़ कर सकते हैं या पैरेंट कंस्ट्रक्टर को किए गए कॉल को छोड़ सकते हैं।

जी हां। जनरेट किए गए कोड को अभी भी पढ़ना, समीक्षा करना और उसमें मौजूद कमियों को दूर करना आवश्यक है। प्रोटोटाइप, "this" और प्राइवेट फ़ील्ड कैसे काम करते हैं, यह जानने से ही आप किसी गलत सुझाव को प्रोडक्शन में जाने से पहले पहचान सकते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: