Si tengo un archivo a.js:
var variableImportante = {...};
var b = require('b.js');
b.funct(23);
y otro b.js
module.exports = {
funct: (arg) => {//como acceder a variableImportante desde aqui sin pasarla como argumento a la funcion funct}
}
Un saludo
El modulo "b.js" no debería depender de una variable de otro archivo salvo que lo importe.
La mejor opción, es pasar el valor a mano. Puedes exportar en "b.js" una función "setVar()", y llamarla desde "a.js". Solo la llamarías una vez, es la ventaja, no tendrías que pasársela a cada función.
Cita de: ivancea96 en 24 Noviembre 2017, 17:05 PM
El modulo "b.js" no debería depender de una variable de otro archivo salvo que lo importe.
La mejor opción, es pasar el valor a mano. Puedes exportar en "b.js" una función "setVar()", y llamarla desde "a.js". Solo la llamarías una vez, es la ventaja, no tendrías que pasársela a cada función.
Esto podria ser una solucion pero si son varias variables no me gustaria pasar todos como argumentos. Tambien se pueden poner todos en un objeto y pasarlo pero no es lo que busco.
Y si en
variableImportante tengo un objeto que contiene datos de un objeto binario muy grande que no es conveniente copiar, como puedo pasarlo como puntero?
En javascript las variables no se copian. Tampoco se pasan por referencia. Es como pasar una referencia al objeto que contiene. Con lo cual, los objetos grandes no tendrán problema.
Y bueno. Lo de que un módulo de Node tenga acceso a una variable de otro código que va a importar ese módulo... Es casi una referencia circular, que es mejor evitar.
Cita de: ivancea96 en 25 Noviembre 2017, 21:10 PM
En javascript las variables no se copian. Tampoco se pasan por referencia. Es como pasar una referencia al objeto que contiene. Con lo cual, los objetos grandes no tendrán problema.
Y bueno. Lo de que un módulo de Node tenga acceso a una variable de otro código que va a importar ese módulo... Es casi una referencia circular, que es mejor evitar.
Lo haré con setVar gracias :D
Puedes importar la variable de a.js en b.js como una clase, si es algo de lo que buscas:
class VariableImp {
constructor() {
this.variableImportante = { };
}
}
export default VariableImp;
y en b.js
a = require('./a.js');
variableImp = new a.VariableImp() // Si usas babel puedes hacer import a, {VariableImp} from './a.js';
module.exports = {
funct:(arg) => {variableImp.variableImportante /* is usas babel seria solo VariableImp */}
}