Noob en JS aquí.
Digamos que tengo un archivo js donde los contenidos son como
function a(){} a.prototype.method1 = function() { ... }; a.prototype.method2 = function() { ... }; function b(){} b.prototype.method3 = function() { ... }; b.prototype.method4 = function() { ... }; module.exports = new a(); module.exports = new b();En este archivo, tengo una definición de función. En el siguiente archivo, intento acceder a los métodos a continuación.
var x = require('./file.js'); xamethod1(); //Not working x.method1(); //Not workingPero ambos tipos de acceso dan como resultado un error para mí. ¿Me pueden ayudar con los pasos para acceder a los métodos correctamente?
Y puedo acceder a esas funciones si trato de tener solo 1 exportación en un archivo. Pero quiero que sea así. 2 exportaciones en un mismo archivo.
El problema es que está reemplazando la propiedad de exports dos veces:
module.exports = new a(); module.exports = new b(); Como resultado, solo está exportando una cosa: una instancia de b , que no tiene ningún method1 .
En su lugar, escriba en las propiedades del objeto de exports :
module.exports.a = new a(); module.exports.b = new b();Luego:
const x = require('./file.js'); xamethod1(); // ... o más típicamente, con desestructuración para que no necesite x :
const {a, b} = require('./file.js'); a.method1(); // ...Dicho todo esto: esa sintaxis es el antiguo sistema de módulos CommonJS . Le sugiero que aprenda la sintaxis estándar más nueva, " ESM " (Módulos de script E CMA), agregada a la especificación de JavaScript en ES2015 :
function A() { } A.prototype.method1 = function() { /* ... */ }; A.prototype.method2 = function() { /* ... */ }; function B(){} B.prototype.method3 = function() { /* ... */ }; B.prototype.method4 = function() { /* ... */ }; export const a = new A(); export const b = new B();También tenga en cuenta que hice que las funciones del constructor comiencen con una letra mayúscula, que es la convención estándar en JavaScript.
La importación sería:
import { a, b } from "./file.js"; a.method1(); // ... Para hacer eso, agregue "type": :"module" a su package.json (o use la extensión de archivo .mjs , consulte los documentos vinculados para obtener más detalles). Sin embargo, tenga en cuenta que una gran cantidad de paquetes npm aún no se han actualizado para admitir ESM (sobre todo porque la compatibilidad con ambos tomó un tiempo para concretarse y es un poco molesto), por lo que en algunos casos tiene que saltar a través de algunos ( menor) aros para usarlos; más aquí
(También puede consultar la sintaxis de la class , que proporciona una forma más concisa y eficaz de escribir funciones constructoras y sus objetos .prototype asociados).
module.exports = { a, b }Llámalo desde otro archivo:
const {a, b} = require("./file.js");