如何从Java中具有多个嵌套函数的函数返回值?

时间:2018-10-15 10:40:46

标签: javascript closures nested-function

问题:我想从其父方法之外的嵌套方法中调用一个值。换句话说,我想要“ console.log(someObjects [i] .valueChecker);”的输出。为“ true”或“ false”。但是,它只是返回函数本身。

到目前为止,我已经做过的事情:因此,我一直在寻找Web /堆栈溢出的解决方案,但要么找不到解决方案,要么就无法理解。我认为这与“闭包”有关,我所见问题的大多数解决方案都是从子方法返回,然后从父方法返回子方法。但是,每次尝试这种操作时,我都会遇到很多错误-要么突然不存在另一个子方法,要么代码运行,但是输出仍然是一个函数。我想知道使用多种方法是否会影响问题。

上下文:我正在制作一款平台游戏,同一个敌人有多种类型。我想检查玩家和武器之间的碰撞,因此需要敌人功能的一些值(我不想使用“类”一词,但我不确定合适的术语)。不过,我对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 :(得分:0)

尝试

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

因为我将值检查器视为函数

this.valueChecker = function()