簡體   English   中英

在VM上下文內部時,無法調用類外部的函數

[英]Unable to call a function that is outside of a class, while being inside VM context

這是我的主要代碼:

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;

我正在將意圖對象和字符對象傳遞給VM上下文,但無法從字符實例中引用意圖。

我可以在角色實例外部而不是從內部引用意圖。

我的直覺是自從我測試添加console.log(123);以來,這里存在某種上下文/范圍問題。 對於該類,當從類外部進行的所有console.log()調用都到達我的客戶端控制台時(我將自定義控制台對象傳遞給了VM上下文,該123發送到了我的服務器的控制台,而不是客戶端的控制台)通過socket.io發送給客戶端的消息)。

我需要的是整個vm上下文的頂級上下文。 諸如窗口之類的東西,所以我可以在游戲對象內使用“ window.intents”(已編輯)

我將意圖對象移到了Character類。 不完全是一個答案,但我想我最初的想法很糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM