这是我的主要代码:
const intents = {};
const characters = [
new Character(0, 400, 300),
new Character(1, 500, 200)
];
const vmContextMethods = require('./vm/context_methods.js')(characters);
const vmContext = {
'intents': intents,
'game': Object.freeze(vmContextMethods)
};
vm.createContext(vmContext);
vm.runInContext('characters[0].test();', vmContext, { displayErrors: true });
这里是context_methods.js:
module.exports = function(characters) {
const module = {
characters
}
return module;
}
这里是角色类:
class Character {
constructor(id, x, y) {
this.id = id;
this.x = x;
this.y = y;
}
test() {
intents.test = true;
}
}
module.exports = Character;
我将intents对象和characters对象传递给VM上下文,但是我无法从字符实例中引用意图。
我能够引用角色实例之外的意图,但不能从内部引用意图。
从我测试添加console.log(123)开始,我的直觉/范围问题就出现了。在课堂上,当所有从课堂外调用的console.log()来到我的客户端控制台时,123被发送到我的服务器控制台,而不是客户端的控制台(我将自定义控制台对象传递给VM上下文,后者通过socket.io将消息发送到客户端。
我需要的东西是整个vm上下文的顶级上下文。类似于窗口的东西,所以我可以使用" window.intents"在游戏对象内(编辑)
答案 0 :(得分:0)
我将intents对象移动到了Character类。不完全是答案,但我想我最初的想法很糟糕。