Pregunta: | 14269 - CONSULTA DE VARIABLES DE UNA CLASE |
Autor: | Jorge Espada |
He declarado una clase Triangulo de la manera siguiente:
1. Un constructor "Triangulo" recibe como parámetros las coordenadas de los vértices, la base y la altura, y los asigna uno a uno utilizando this.campo=parametro 2. Una función "area" muestra un mensaje con el resultado de hacer: this.base*this.altura/2 3. Desde una función "GestionTrinagulo", creamos un objeto mediante var t = new Triangulo(1,1,2,2,3,3,4,4); t.area(); 4. La pregunta es ¿por qué la llamada a la función area() no devuelve nada, a no ser que incluya en el constructor un atributo para el área y lo cargue aunque sea sin datos? Ej: (añadir al constructor: this.area=area; y no añadir area como parámetro). Me parece extraño dicho comportamiento. Os agradecería si pudiéseis explicarme la razón. |
Respuesta: | David Delgado Ruiz |
Hola, habría que estudiar como has creado la clase, entiendo que la función area() la has creado typeando function area(), en cuyo caso el problema es que la función no pertenece a la clase, de forma que sólo cuando asignas this.area = area estas asignando a la propiedad area la funcion externa area, para crear la clase sería algo así:
function Triangulo( x1, y1, x2, y2, x3, y3, b, a ){ this.Vertice1X = x1; this.Vertice1Y = y1; this.Vertice2X = x2; this.Vertice2Y = y2; this.Vertice3X = x3; this.Vertice3Y = y3; this.Base = b; this.Altura = a }; Triangulo.Vertice1X; Triangulo.Vertice1Y; Triangulo.Vertice2X; Triangulo.Vertice2Y; Triangulo.Vertice3X; Triangulo.Vertice3Y; Triangulo.Base; Triangulo.Altura; Triangulo.prototype.Area = function() { return this.Base*this.Altura/2;}; var MiTriangulo = new Triangulo( 1, 1, 2, 2, 3, 3, 4, 4 ); var MiTriangulo2 = new Triangulo( 4, 4, 3, 3, 2, 2, 1, 4 ); alert(MiTriangulo.Area()); alert(MiTriangulo2.Area()); Fijate bien que para la función Area ha sido necesario colocar prototype, en caso contraio no aceptara la función y seguira devolviendo undefined. Un saludo |