Saltar al contenido

Node.js: uso de module.exports como constructor

Si te encuentras con alguna parte que no comprendes nos puedes dejar un comentario y te ayudaremos lo mas rápido que podamos.

Solución:

Los módulos de CommonJS permiten dos formas de definir las propiedades exportadas. En cualquier caso, está devolviendo un Objeto/Función. Debido a que las funciones son ciudadanos de primera clase en JavaScript, pueden actuar como Objetos (técnicamente son Objetos). Eso dijo su pregunta sobre el uso de la new palabras clave tiene una respuesta simple: sí. Ilustraré…

Exportaciones de módulos

Puedes usar el exports variable proporcionada para adjuntarle propiedades. Una vez requeridas en otro módulo, esas propiedades asignadas estarán disponibles. O puede asignar un objeto a la propiedad module.exports. En cualquier caso, lo que se devuelve por require() es una referencia al valor de module.exports.

Un ejemplo de pseudocódigo de cómo se define un módulo:

var theModule = 
  exports: 
;

(function(module, exports, require) 

  // Your module code goes here

)(theModule, theModule.exports, theRequireFunction);

En el ejemplo anterior module.exports y exports son el mismo objeto. Lo bueno es que no ve nada de eso en sus módulos CommonJS, ya que todo el sistema se encarga de eso, todo lo que necesita saber es que hay un objeto de módulo con una propiedad de exportación y una variable de exportación que apunta a la Lo mismo hace module.exports.

Requerir con constructores

Dado que puede adjuntar una función directamente a module.exports esencialmente puede devolver una función y, como cualquier función, podría administrarse como un constructor (Eso está en cursiva ya que la única diferencia entre una función y un constructor en JavaScript es cómo pretende usarlo. Técnicamente no hay diferencia).

Entonces, el siguiente es un código perfectamente bueno y personalmente lo animo:

// My module
function MyObject(bar) 
  this.bar = bar;


MyObject.prototype.foo = function foo() 
  console.log(this.bar);
;

module.exports = MyObject;

// In another module:
var MyObjectOrSomeCleverName = require("./my_object.js");
var my_obj_instance = new MyObjectOrSomeCleverName("foobar");
my_obj_instance.foo(); // => "foobar"

Requerir para no constructores

Lo mismo ocurre con las funciones que no son de tipo constructor:

// My Module
exports.someFunction = function someFunction(msg) 
  console.log(msg);


// In another module
var MyModule = require("./my_module.js");
MyModule.someFunction("foobar"); // => "foobar"

En mi opinión, algunos de los ejemplos de node.js son bastante artificiales.

Es posible que espere ver algo más como esto en el mundo real.

// square.js
function Square(width) 

  if (!(this instanceof Square)) 
    return new Square(width);
  

  this.width = width;
;

Square.prototype.area = function area() 
  return Math.pow(this.width, 2);
;

module.exports = Square;

Uso

var Square = require("./square");

// you can use `new` keyword
var s = new Square(5);
s.area(); // 25

// or you can skip it!
var s2 = Square(10);
s2.area(); // 100

Para la gente de ES6

class Square 
  constructor(width) 
    this.width = width;
  
  area() 
    return Math.pow(this.width, 2);
  


export default Square;

Usarlo en ES6

import Square from "./square";
// ...

Al usar una clase, usted deber utilizar el new palabra clave para instanciarlo. Todo lo demás se queda igual.

Si entiendes que te ha resultado de utilidad este artículo, sería de mucha ayuda si lo compartes con el resto entusiastas de la programación de esta forma nos ayudas a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *