Недавно я начал использовать ES6 и правильно разделил свой код на несколько файлов для удобства чтения и упрощения контроля версий, и я столкнулся с проблемой, которая, я не уверен, предназначена для этого, или если я что-то упускаю.
У меня есть класс, хранящийся в файле (class. js) отдельно от моего основного скрипта (main. js) и экспортированный через module.exports. В main. js требуется class. js, и я использую его для создания некоторых экземпляров класса, в котором он находится. Внутри main. js У меня есть глобальная переменная, которая регулярно обновляется, скажем, connectedPlayers. Внутри одного из моих методов класса. js У меня есть usersOnline (), который должен просто возвращать значение глобальной переменной connectedPlayers. Однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке, что connectedPlayers не определен. У меня создалось впечатление, что, поскольку объект, который вызывает users.online, был определен внутри main. js, его метод usersOnline () будет искать connectedPlayers внутри main. js, а не class. js ... это правильное мышление? Если я прав в этом мнении, то почему я не могу получить доступ к connectedPlayers? Если я ошибаюсь, как я могу получить доступ к connectedPlayers изнутри моего класса?
Обратите внимание, что это все заполнители, и на самом деле у меня довольно много глобальных переменных в основном. внутри класса. js для доступа. Эти глобальные переменные также регулярно меняются, поэтому я не могу обязательно передавать их в конструктор, и я не хочу предоставлять их для каждого вызова любого метода, который я хочу использовать. Я уверен, что есть лучший способ сделать это, но как?
Чтобы еще больше уточнить, функциональность, которую я ищу, похожа на то, как JS импорт работает в браузере, однажды вы импортируете свой код, он действует так, как если бы вы объединили этот блок кода с кодом, из которого вы импортируете. Хотя я понимаю, что это не так, как это работает в node, я подумал, что определение экземпляра моего класса внутри 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.
Кроме того, в этом примере я мог просто переместить количество игроков в класс. js, но в моем реальном приложении я не мог этого сделать .