Как я могу вернуть значение из функции с несколькими вложенными функциями в Javascript? - PullRequest
0 голосов
/ 15 октября 2018

Проблема: я хочу вызвать значение из вложенного метода вне его родительского метода.Другими словами, я хочу вывод из "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;
	}
    */

1 Ответ

0 голосов
/ 15 октября 2018

Попробуйте

console.log(someObjects[i].valueChecker())

Поскольку я вижу функцию проверки значения как функцию

this.valueChecker = function() 
...