0
這是我的主要代碼:無法調用一個函數,它是一類外,而被VM上下文中
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()調用都發送到我的客戶端控制檯時(我將自定義控制檯對象傳遞給發送該虛擬機的虛擬機上下文),將123發送到我的服務器控制檯,而不是客戶端控制檯消息通過socket.io發送到客戶端)。
我需要的東西是整個vm上下文的頂級上下文。如窗口,所以我可以使用遊戲對象(編輯)內的「window.intents」
在這種情況下使用上下文開始的目標是什麼?你的'Character'對象是在外部上下文中創建的,所以你在上下文中使'intents'成爲全局的事實對它沒有任何影響。 – loganfsmyth
我試圖將兩個不同的對象傳遞給VM上下文,意圖和字符實例。我想要字符實例能夠引用intents對象。我怎樣才能做到這一點?我嘗試了幾種不同的東西,但沒有雪茄。 – unska
由於該類是在上下文之外聲明的,所以'intents'對象從上下文之外的全局加載。您將對象的引用傳遞給在上下文中運行的代碼,但這不會改變「Character」實例的行爲方式。爲什麼這需要成爲一個全球性的?您可以輕鬆地將intents對象傳遞給'Character'實例並完全避免全局。 – loganfsmyth