tengo este codigo:
class Square { constructor(side) { this.side = side; } } class Rectangle { constructor(width, height) { this.width = width; this.height = height; } } class calcMe { } const square = new Square(4); const rectangle = new Rectangle(4, 2); const circle = new Circle(5); console.log(calcMe.calculate(square)); console.log(calcMe.calculate(rectangle));Y quiero hacer un método estático que pueda calcular el área de estas formas. ¿Cómo puedo decirle esto al método estático? Mi intento es:
class AreaCalculator { static calculate(val) { for (let key in val) { if (key === 'side') { return console.log(`L'area del quadrato è ${val.side * val.side}`) } else { if (key === 'width') { return console.log(`L'area del rettangolo è ${val.width * val.height}`) } else { if (key === 'radius') { return console.log(`L'area del cerchio è ${val.radius * val.radius * Math.PI}`) } } } } } }Pero obviamente está mal, incluso si puedo consolar el registro de los resultados correctos. ¿Alguien puede indicarme la dirección correcta? ¿Cómo puedo tener acceso a todos los valores de las formas para devolver el cálculo correcto?
Sería mejor encapsular la lógica de cálculo del área dentro del propio objeto de forma, ya que es la propia forma la que debe saber cómo calcular su propia área. Entonces tendría algo como circle.area(), square.area() etc.
p.ej
class Square { constructor(side) { this.side = side; } area() { return this.side * this.side; } } const square = new Square(4); const squareArea = square.area();Definitivamente es más fácil usar métodos de instancia para hacer el cálculo para cada tipo de objeto.
No estoy seguro de lo que quieres o de la segunda parte. Una cosa acerca de los métodos definidos en el cuerpo de la clase es que se asignarán al prototipo de la clase. Así que aquí hay una posible solución.
class Square { constructor(side) { this.side = side; } area(){ return this.side * this.side; } } class Rectangle { constructor(width, height) { this.width = width; this.height = height; } area(){ return this.width * this.height; } } class Circle { constructor(radius) { this.radius = radius; } area(){ return Math.PI * this.radius * this.radius; } } class calcMe { calculate(obj) { return obj.area() } } const square = new Square(4); const rectangle = new Rectangle(4, 2); const circle = new Circle(5); console.log(calcMe.prototype.calculate(square)); console.log(calcMe.prototype.calculate(rectangle)); console.log(calcMe.prototype.calculate(circle));