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.