Установить глобальную переменную для доступа из других файлов - JavaScript - PullRequest
0 голосов
/ 17 января 2019

Я нашел решение, используя global.consoleLog = v => this.log(v));. Теперь переменная consoleLog доступна везде.

ОРИГИНАЛЬНЫЙ ВОПРОС

В настоящее время я участвую в соревновании Battlecode. Мой вопрос касается Javascript и доступа к глобальной переменной.

У меня есть минимальный рабочий пример с двумя файлами.

// === robot.js === 
import { BCAbstractRobot } from 'battlecode';
import Test from './test.js';

class MyRobot extends BCAbstractRobot {
    constructor() {
        super();
        this.log("asdf"); // the log function does work
        // Test.setConsoleLog(this.log); // way 1
        // console.log = this.log; // way 2
    }
    turn() {
        Test.testFunction("hello");
        return this.move(0, 1);
    }
}

// === test.js === 
let consoleLog = undefined;

function setConsoleLog(c) {
    consoleLog = c;
}

function testFunction(s) {
    // consoleLog(s); // way 1
    // console.log(s); // way 2
}

export default { testFunction, consoleLog, setConsoleLog };

Поскольку Battlecode предоставляет вам функцию log, вы не можете использовать console.log по соображениям безопасности Однако я хочу иметь возможность войти из любого файла. Функция log является свойством класса MyRobot, но я хочу иметь возможность доступа к функции из других файлов и функций без передачи параметров каждый раз.

Я пробовал пару способов. Сначала я попытался создать экспорт из файла утилит (test.js), который начинался бы как неопределенный, а затем устанавливался setConsoleLog. Однако, когда я пытаюсь использовать consoleLog, он все еще не определен. Я также попытался перезаписать ссылку на console.log, но это работает только в одном файле, а ссылка все еще на console.log в других файлах.

Каков рекомендуемый способ создания глобальной ссылки или импорта в this.log, чтобы любой файл мог импортировать его и получать к нему доступ?

Бот запускается внутри узла vm, но, насколько я знаю, с пакетом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...