【发布时间】:2020-11-02 07:39:24
【问题描述】:
我最近开始使用 ES6 并将我的代码正确地划分为多个文件以提高可读性和更容易的版本控制,但我遇到了一个我不确定是有意为之的问题,或者我是否遗漏了一些东西。
我有一个类存储在与我的主脚本 (main.js) 分开的文件 (class.js) 中,并通过 module.exports 导出。在 main.js 中,class.js 是必需的,我使用它来创建它所包含的类的一些实例。在 main.js 中,我有一个定期更新的全局变量,比如说 connectedPlayers。在我的 class.js 方法之一中,我有 usersOnline(),它应该简单地返回全局变量 connectedPlayers 的值。但是,当我尝试这样做时,会抛出一个未定义 connectedPlayers 的错误。我的印象是,由于调用 users.online 的对象是在 main.js 中定义的,它的 usersOnline() 方法会在 main.js 中查找 connectedPlayers,而不是 class.js ......这是正确的想法吗?如果我在这个概念上是正确的,那么为什么我不能访问 connectedPlayers?如果我的想法不正确,我该如何从班级内部访问 connectedPlayers?
请注意,这些都是占位符,实际上我在 main.js 中有很多全局变量,我需要 class.js 中的方法来访问它们。这些全局变量也会定期更改,因此我不一定将它们传递给构造函数,也不想在每次调用我想使用的任何方法时都提供它们。我确信有更好的方法可以做到这一点,但是如何呢?
为了进一步澄清,我希望获得的功能类似于 JS 导入在浏览器中的工作方式,一旦您导入代码,它就像您将该代码块连接到您正在导入的代码一样从。虽然我知道这不是它在节点中的工作方式,但我认为在 main.js 中定义我的类的实例本质上会调用该对象的方法(在 connectedPlayers 的范围内),但我想我的理解是有缺陷的。
伪代码:
//class.js
class user{
constructor(id){
this.id = id;
}
someOtherMethod(){
...
}
usersOnline(){
this.someOtherMethod(this.id); //here to show I need the context to still be the obj
return connectedPlayers;
}
}
//main.js
var user = require('class.js');
var players = {}
var connectedPlayers = 0;
players[id] = new user(id);
console.log(players[id].usersOnline()) //expect to return value of connectedPlayers, but also execute the other function inside of usersOnline properly.
另外,在这个例子中,我可以简单地将玩家数量移动到 class.js 中,但在我的实际应用中,我不能这样做。
【问题讨论】:
-
你能添加一些代码吗?我不明白你是否使用
global。 -
@ManuelSpigolon 我没有使用全局关键字,如果这就是你要问的......这可能是我的问题。稍等片刻刷新,我会添加一些伪代码。
标签: javascript node.js class import global-variables