Tengo algunos problemas con JavaScript. Tengo el siguiente código:JavaScript: Agregar clase heredada a la matriz no funciona
<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 hereda de la clase Control.
La función addControl en la clase Form simplemente agrega el control a una matriz.
El problema es que cuando agrego más de un SpecializedControl, los valores de la matriz son anulados, lo que significa que cuando accedo al primer elemento de la matriz, que debería ser "Control1", obtengo "Control2" . Control1 ya no está en la matriz.
Cuando utilizo la misma función con los objetos de control como parámetros, todo funciona como se esperaba.
¿Alguien sabe por qué sucede esto y qué se puede hacer para corregirlo?
recomiendo la segunda opción, llamando al constructor de la superclase en el constructor de la subclase. Parece lo correcto de hacer. La primera opción requiere exponer la variable 'name' y la tercera opción usa una biblioteca adicional que intenta implementar una herencia basada en clases regular como reemplazo de la herencia prototípica de JavaScript. –
joi usa herencia prototípica, herencia no clásica –
Oh, mi mal. Sin embargo, el '#nombre' solo es interno por convención y no impide que acceda desde el exterior. Con cierres, puede tener variables verdaderamente privadas. –