La Web del Programador: Comunidad de Programadores
 
    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