काम नहीं कर रहा है मुझे जावास्क्रिप्ट के साथ कुछ समस्याएं आ रही हैं। मुझे निम्नलिखित कोड मिल गया है:जावास्क्रिप्ट: सरणी में विरासत वर्ग जोड़ना
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function Control(){
var name;
this.setName = function(newName){
name = newName;
};
this.getName = function(){
return name;
};
}
function SpecializedControl(){
}
SpecializedControl.prototype = new Control();
function Form(){
var formControls = [];
this.addControl = function(control){
formControls.push(control);
alert(formControls[0].getName());
};
}
var form = new Form();
var control1 = new SpecializedControl();
control1.setName("Control1");
form.addControl(control1);
var control2 = new SpecializedControl();
control2.setName("Control2");
form.addControl(control2);
</script>
</head>
<body>
</body>
</html>
नियंत्रण कक्षा से विशेष नियंत्रण प्राप्त होता है।
फॉर्म क्लास में एडकंट्रोल फ़ंक्शन केवल एक सरणी में नियंत्रण जोड़ता है।
समस्या यह है कि जब मैं एक से अधिक स्पेशल कंट्रोल जोड़ता हूं, तो सरणी में मान ओवरड्रिड होते हैं, इसका मतलब है कि जब मैं सरणी में पहले आइटम तक पहुंचता हूं, जो "नियंत्रण 1" होना चाहिए, तो मुझे "नियंत्रण 2" । कंट्रोल 1 अब सरणी में नहीं है।
जब मैं नियंत्रण ऑब्जेक्ट्स के साथ एक ही फ़ंक्शन का उपयोग करता हूं क्योंकि पैरामीटर सब कुछ अपेक्षित काम करता है।
क्या कोई जानता है कि ऐसा क्यों होता है और इसे ठीक करने के लिए क्या किया जा सकता है?
मैं दूसरे विकल्प की अनुशंसा, उपवर्ग निर्माता में सुपर क्लास के निर्माता बुला। ऐसा करने के लिए सही काम की तरह लगता है। पहले विकल्प को 'name' चर का खुलासा करने की आवश्यकता है और तीसरा विकल्प एक अतिरिक्त लाइब्रेरी का उपयोग करता है जो नियमित वर्ग-आधारित विरासत को जावास्क्रिप्ट के प्रोटोटाइपिकल विरासत के प्रतिस्थापन के रूप में लागू करने का प्रयास करता है। –
जॉय प्रोटोटाइपिकल विरासत का उपयोग करता है, शास्त्रीय विरासत नहीं –
ओह, मेरा बुरा। फिर भी, '# name' केवल सम्मेलन द्वारा आंतरिक है और वास्तव में आपको इसे बाहर से एक्सेस करने से नहीं रोकता है। बंद होने के साथ, आप वास्तव में निजी चर हो सकते हैं। –