JavaScript に問題があります。私は次のコードを持っています:
<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>
SpecializedControl は Control クラスを継承します。
Form クラスの addControl 関数は、コントロールを配列に追加するだけです。
問題は、複数の SpecializedControl を追加すると、配列内の値が一種のオーバーライドされることです。つまり、配列内の最初の項目 ("Control1" である必要があります) にアクセスすると、"Control2" が取得されます。Control1 はもう配列にありません。
Control オブジェクトで同じ関数をパラメーターとして使用すると、すべてが期待どおりに機能します。
なぜこれが起こるのか、これを修正するために何ができるのか誰かが知っていますか?