Название вопроса не может быть лучшим, но вот код, который я написал до сих пор:Как создать переменную, которая существует только в состоянии объекта?
var menuState = {
//state variables
menuBttn: {
x: _canvas.width/2,
y:_canvas.height/2,
img: imageArray[2],
over: false,
click: function() {
changeState(2);
}
},
preload: function() {
},
update: function(){
surface.clearRect(0, 0, _canvas.width, _canvas.height);
for (var i = 0; i < menuAssets; i++){
surface.drawImage(//draw menuBttn);
}
},
exit: function(){
},
};
То, что я хочу сделать, это по существу создать переменную с именем menuButtn (который является объектом), что существует только в menuState.
Я думал, что я мог бы сделать это, выполнив:
var menuState = {
//state variables
this.menuBttn = {
x: _canvas.width/2,
y:_canvas.height/2,
img: imageArray[2],
over: false,
click: function(){
changeState(2);
}
},
}
Это так, как это работает в Phaser.io (библиотека для создания игр), но я пытаюсь сделать свой собственный игровой движок ,
Как это сделать?
Я не знаю о * phaser *, но в стандартном объектном литерале вы не можете определить имя свойства, используя 'this.menuBttn'. Я думаю, вы ожидаете, что это * будет объектом, которому вы назначаете литерал, что неверно. * this * является параметром контекста выполнения, в глобальном коде это глобальный объект. Он установлен во время выполнения, как функция вызывается (или * bind *), а не лексически (кроме функций стрелок, но они здесь неактуальны). – RobG
@RobG У меня был намек на то, что будет так. Ну, так как это вне опции, у вас есть способ объявить переменную, которая существует только внутри области действия одного объекта/состояния *, но *, которые могут быть разделены между различными свойствами этого объекта/состояния? – PixelProgrammer
@RobG, подождите, вы говорите, что вы не можете сделать obj = {this.subobjc = {...}} '? Потому что я уверен, что это 100% достоверно и точно, как вы должны определять объекты, которые имеют отношение только к этому контексту. В этом случае 'menuState' доступен во всем мире, но' menuBttn' не будет доступен по всему миру. – frei