Проблема: я хочу вызвать значение из вложенного метода вне его родительского метода.Другими словами, я хочу вывод из "console.log (someObjects [i] .valueChecker);"быть «истинным» или «ложным».Тем не менее, он просто возвращает саму функцию.
То, что я сделал до сих пор: поэтому я искал переполнение сети / стека для решения, но либо я не нашел решение, либо я просто не могу понять его.Я думаю, что это как-то связано с «замыканиями», и большинство решений проблем, которые я видел, состояло в том, чтобы вернуться из субметода, а затем вернуть субметод из родительского метода.Тем не менее, каждый раз, когда я пробовал это, я просто сталкивался с многочисленными ошибками - либо внезапно не появляется другой подметод, либо код выполняется, но вывод по-прежнему является функцией.Интересно, влияет ли на решение проблемы несколько методов?
Контекст: я делаю платформерную игру, и существует несколько типов одного и того же врага.Я хочу проверить, нет ли столкновения между игроком и оружием, и поэтому мне нужны некоторые значения из функции противника (я не хочу использовать слово «класс», но я не уверен насчет подходящей терминологии).Хотя я гораздо лучше знаком с Java, поэтому меня расстраивает то, что я не могу создать отдельный класс и просто иметь метод для возврата значений.
//assume all the other html/main stuff is already set up
var temp = {
create: c4,
update: u4
}
MyObject = function(value) {
this.value = value; //passed in value
var magicNumber = 4; //local value initialized/declared
this.valueChecker = function() {
//return boolean
return this.value == this.magicNumber;
}
this.otherValueChecker = function() {
//return boolean
return (this.value + 1) == this.magicNumber;
}
}
//just make the space bar tied to a boolean
var someKeyPress;
function c4() {
someKeyPress = game.input.keyboard.addKey(Phaser.Keyboard.A);
}
var someObjects = [];
//... later on in the program, presuming key already coded
function u4() {
//add a new MyObject to array someObjects
if (someKeyPress.isDown) {
//check with various random numbers between 3 to 5
someObjects.push(new MyObject(game.rnd.integerInRange(3, 5)));
}
//run through MyObject(s) added to someObjects, and see if any match number
for (var i = 0; i < someObjects.length; i++) {
console.log(someObjects[i].valueChecker);
}
}
/* current output
ƒ () {
//return boolean
return this.value == this.magicNumber;
}
*/