【发布时间】:2019-03-19 18:31:15
【问题描述】:
问题:我想从其父方法之外的嵌套方法中调用一个值。换句话说,我想要“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;
}
*/
【问题讨论】:
-
我没有详细阅读代码——但是如果你记录函数的实际返回值,而不是函数本身,它会不会起作用。也就是
console.log(someObjects[i].valueChecker())? -
你将不得不真正调用使用
()的方法来调用它并得到它的结果......不,这与闭包几乎没有任何关系 -
首先,非常感谢 cmets。在编辑代码以调用方法 console.log(someObjects[i].valueChecker()) 并使语句始终为 true(又名 MagicNumber 和 this.value 始终等于 4)后,它似乎总是打印 false 无论如何。跨度>
-
var magicNumber = 4声明了一个从未使用过的局部变量。您需要将其更改为this.magicNumber = 4或更改您的 valueChecker 方法以检查magicNumber -
@Robin Zigmond 做到了。非常感谢!显然,这一直是一个真正简单的修复,而我在 javascript 中的新手是真正的问题。我需要刷新本地/全局变量
标签: javascript closures nested-function