Ich habe einige Probleme mit JavaScript. Ich habe folgenden Code:JavaScript: Das Hinzufügen der geerbten Klasse zum Array funktioniert nicht
<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>
Das SpecializedControl erbt von der Control-Klasse.
Die Funktion addControl in der Form-Klasse fügt das Steuerelement nur einem Array hinzu.
Das Problem ist, dass, wenn ich mehr als ein SpecializedControl hinzufügen, die Werte im Array Art von überschrieben werden, das heißt, wenn ich auf das erste Element im Array zugreifen, die "Control1" sein sollte, bekomme ich "Control2" . Control1 ist nicht mehr im Array.
Wenn ich die gleiche Funktion mit Control-Objekte als Parameter verwenden, funktioniert alles wie erwartet.
Weiß jemand, warum das passiert und was kann getan werden, um dies zu korrigieren?
Ich empfehle die zweite Option, den Konstruktor der übergeordneten Klasse im Konstruktor Unterklasse aufrufen. Es scheint das Richtige zu sein. Die erste Option erfordert, dass die Variable 'name' offen gelegt wird, und die dritte Option verwendet eine zusätzliche Bibliothek, die versucht, eine normale klassenbasierte Vererbung als Ersatz für die prototypische Vererbung von JavaScript zu implementieren. –
joi verwendet prototypische Vererbung, nicht klassische Vererbung –
Oh, mein Schlechter. Dennoch ist der '# Name' nur von Konvention her intern und hindert Sie nicht daran, von außen darauf zuzugreifen. Mit Schließungen können Sie wirklich private Variablen haben. –