我通过使用global.consoleLog = v => this.log(v));
找到了解决方案。现在,变量consoleLog随处可用。
目前,我正在参加战法挑战。我的问题是关于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 };
由于战役代码具有日志功能,因此出于安全原因不能使用console.log。但是我希望能够从任何文件登录。日志函数是MyRobot类的属性,但是我希望能够从其他文件和函数访问该函数而无需每次都传递参数。
我尝试了几种方法。首先,我尝试从效用文件(test.js)创建一个导出文件,该文件以未定义开始,然后由setConsoleLog设置。但是,当我尝试使用consoleLog时,它仍然是未定义的。 我还尝试覆盖console.log参考,但这仅在一个文件中有效,而参考仍然在其他文件中指向console.log。
创建全局引用或导入this.log以便任何文件都可以导入和访问它的推荐方法是什么?
该机器人在节点vm中运行,但据我所知,它带有捆绑器。