gpt4 book ai didi

javascript - node.js 将变量公开给模块?

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:59 26 4
gpt4 key购买 nike

我已经阅读了很多关于如何在 node.js 中创建模块的文章,您可以使用 module.exports 将模块内部暴露给包含它的文件。太棒了!

反之如何运作?我将使用以下示例:-)

用户.JS

 function User() {
this.property = 'value';
this.doSomething = function() {
var getStuff = mainFileFunction();
// do something with getStuff
}

module.exports = User;

MAIN.JS

 var myArray = [];
myArray.push('something');
myArray.push('something else');
mainFileFunction() {
for(thing in myArray) {
return myArray[thing];
}
}

var u = new user();

log(u.property); <--- THIS IS EXPOSED, COOL!

u.doSomething(); <--- This will throw an error because mainFileFunction is not defined in user.js :-(

如果我将 mainFileFunction 移动到用户文件,那么它仍然无法工作,因为 myArray 数组不会被定义......如果我也将其移动,我将无法在 main 中的其他函数中使用它(我想要):-)

如果我在这里遗漏了一些非常明显的东西,我很抱歉......我想要的是公开我从我包含的模块中选择的部分(module.export 适用于此)但我也想公开所有内容所有包含的主文件..

或者只是将所有内容暴露给所有内容?是不是很乱很可怕??

只是为了解释我在这里想做什么...我想在单独的文件中定义类,但我想将它们中的一堆实例化为主文件中的对象并将它们存储在数组中..我想包含可以访问其他对象类型数组的方法的对象。

谢谢大家! :-)

最佳答案

可以使用全局变量,或者有一个适当的循环依赖(需要两个文件),但是 - 这通常是一个坏习惯,会导致可维护性问题 future 。

相反,您可以使用依赖注入(inject)并将 doSomething 注入(inject)到您的模块中。这基本上免费为您提供以下内容:

  • 稍后您可以使用 doSomething 的简单模拟实现来测试 User 并验证代码的正确性
  • 用户的依赖关系是显式而不是隐式的,这使得用户的需求一目了然。

我将提供两种实现,一种使用构造函数依赖注入(inject),另一种使用模块范围设置。

 USER.JS

function User(dependentFunction) {
this.property = 'value';
this.doSomething = function() {
var getStuff = dependentFunction();
// do something with getStuff
}
}

module.exports = User;

MAIN.JS
...
var u = new User(mainFileFunction);
u.doSomething(); // this will now work, using mainFileFunction

这里发生的事情相当简单,我们知道发生了什么。

这也可以是模块范围的设置

USER.JS

function User(depFunc) {
this.property = 'value';
this.doSomething = function() {
var getStuff = depFunc();
// do something with getStuff
}
}
function UserFactory(depFunc){
return function(){
return new User(depFunc);
}
}
module.exports = UserFactory;

MAIN.JS

var getUser = UserFactory(mainFileFunction);
var u = getUser(); // will return a new user with the right function

关于javascript - node.js 将变量公开给模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com