Source: shapesarea.js

'use strict';
let util = require('util');
 
 /**
 * Clase para representar una Shape.
 */
class Shape {
 /**
 * Método Constructor de una Shape.
 *
 * @param {object} options Bloque de código.
 * @param {width} options.width Anchura de la figura.
 * @param {height} options.height Altura de la figura.
 */     
  constructor(options, shape){
    Object.assign(this, options);
    this.shape =  shape || this.constructor.name;
  }
  
/**
 * Método para consegur el area.
 *
 * @return {int} Valor del tamaño del area.
 */ 
  getArea() {
   try {
      let shape = this;
      if (this.constructor.name === 'Shape') 
        shape = new Shape.Shapes[this.shape](this);
      return shape.area();
   }
   catch(e) {
     console.error(`Can't compute area of '${this.shape}' shape.`);
     return null;
   }
  }
  
  /**
 * Método para Saber que tipo de figuar soy
 *
 * @return {string} Retorna como se llama el tipo de figura.
 */ 
  gettipo(){
     this.constructor.name;
  }
  
}

  /**
 * Método que es accedido pro todas las figuras da igual el tipo para
 * cada vez que se crea una figura se incorporara a este array.
 */ 
Shape.Shapes = Shape.Shapes || {};
module.exports = Shape;