"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > ऐरे के रूप में प्रोटोटाइप किए गए जावास्क्रिप्ट ऑब्जेक्ट सदस्य क्लास इंस्टेंसेस में साझा क्यों हो जाते हैं?

ऐरे के रूप में प्रोटोटाइप किए गए जावास्क्रिप्ट ऑब्जेक्ट सदस्य क्लास इंस्टेंसेस में साझा क्यों हो जाते हैं?

2024-12-22 को प्रकाशित
ब्राउज़ करें:110

Why do JavaScript Object Members Prototyped as Arrays Become Shared Across Class Instances?

जावास्क्रिप्ट ऑब्जेक्ट सदस्यों को एरेज़ के रूप में प्रोटोटाइप किया गया: सभी क्लास इंस्टेंसेस में साझा किया गया

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

उदाहरण स्क्रिप्ट इस व्यवहार को प्रदर्शित करती है:फ़ंक्शन सैंडविच() { // समस्या को ठीक करने के लिए इसे अनटिप्पणी करें //यह.सामग्री = []; }

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

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

function Sandwich() {
    // Uncomment this to fix the problem
    //this.ingredients = [];
}

प्रोटोटाइप बनाम इंस्टेंस

function Sandwich() {
    this.ingredients = [];
}

साझा डेटा या विधियों को परिभाषित करने के लिए प्रोटोटाइप में गुण निर्दिष्ट करें।

असाइन करें इंस्टेंस-विशिष्ट डेटा को परिभाषित करने के लिए कंस्ट्रक्टर के अंदर इंस्टेंस के गुण।

  • ठीक करने के लिए कोड संशोधन व्यवहार
  • उदाहरण स्क्रिप्ट में, पंक्ति this.ingredients = [] को अनटिप्पणी करना; सैंडविच कंस्ट्रक्टर के भीतर यह सुनिश्चित करता है कि प्रत्येक उदाहरण का अपना घटक सरणी हो, जैसा कि इरादा था। वर्ग उदाहरणों के बीच। हमेशा याद रखें कि जो डेटा इंस्टेंस-विशिष्ट होना चाहिए, उसे कंस्ट्रक्टर के भीतर परिभाषित किया जाना चाहिए, जबकि साझा डेटा को इनहेरिटेंस के माध्यम से प्रोटोटाइप को सौंपा जा सकता है।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3