在VM上下文中时,无法调用类外的函数

时间:2017-10-21 23:28:43

标签: javascript node.js ecmascript-6

这是我的主要代码:

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"在游戏对象内(编辑)

1 个答案:

答案 0 :(得分:0)

我将intents对象移动到了Character类。不完全是答案,但我想我最初的想法很糟糕。