Javascript:";“未定义”;它不是一个对象

Javascript:";“未定义”;它不是一个对象,javascript,object,undefined,Javascript,Object,Undefined,我正在编写一个脚本,处理变量gameRegion,如下所示: //In the main of the script var variable= new work(); variable.onCrash(crashHandler,{xPos:650,yPos:300}); // In function work() var gameRegion; var onCrashCallback; this.onCrash = function(crashCallback,fieldSize)

我正在编写一个脚本,处理变量
gameRegion
,如下所示:

//In the main of the script

var variable= new work();
variable.onCrash(crashHandler,{xPos:650,yPos:300});


// In function work()

var gameRegion;
var onCrashCallback;

this.onCrash = function(crashCallback,fieldSize) {
gameRegion = fieldSize;
onCrashCallback = crashCallback;
};

crashHandler(){
//unimportant
}

this.atBottom = function(ypos) { 
    if(ypos>gameRegion.yPos) //line with the problem
        return true;
    return false;
};
我收到控制台错误:
TypeError:“undefined”不是对象(正在评估“gameRegion.yPos”)
。这可能意味着我没有正确定义
gameRegion
或其变量
yPos
。我已经看了这段代码一段时间了,但我似乎找不到问题所在

希望您能看到一些我没有看到的东西,但如果我没有包含上下文所需的代码,请告诉我。提前感谢您的帮助。

您可以这样使用-

return (typeof (gameRegion) !== "undefined" && 
        typeof(gameRegion.yPos) !== "undefined" &&
        ypos > gameRegion.yPos);

您必须处理“未定义”。这可以通过以下方式实现:

typeof(foo) == 'undefined'
typeof foo !== 'undefined'
window.foo !== undefined
'foo' in window

前三个变量应该是等价的(只要foo没有被局部变量隐藏),而如果定义了全局变量,但没有初始化(或显式设置为未定义),则最后一个变量将返回true。

小心--类在JavaScript中是保留字,更不用说函数对象的糟糕名称了。抱歉,我只是使用了一个占位符,我将更改它的名称以作澄清。您的代码没有什么问题,但很难理解,因为它在发布时不是很有用(您甚至没有任何调用出现问题的函数的示例代码)。我创建了一个JSFIDLE来解决这个问题,只需稍微重新安排一下就可以了:@Cory我必须给出更多超出问题范围的上下文,包括
atBottom()
,但控制台让我相信错误只存在于
gameRegion
的声明和初始化中,但你告诉我这是对的?很好。我认为您看到的是JavaScript中的其他语法和编程错误。你的小提琴没有编译或运行。我花了大约20分钟清理它,但我开始得到太多的其他错误。如果你一个接一个地解决这些问题,我想你会发现原来的问题会消失。将您的版本与我的版本进行比较,看看我做了哪些更改。如果gameRegion未定义,则返回false,并防止出现控制台错误,但无法解决这两个版本都被解释为未定义的问题(我知道它们不是)。显然它们是。除了
onCrash
函数之外,您是否在任何地方声明gameRegion?什么时候调用
atBottom
。我确信我的问题在于
gameRegion
和否,它不会在其他任何地方声明。
gameRegion
在实际调用
onCrash
之前没有任何值。添加控制台。登录
onCrash
进行检查;也许还可以查看
游戏区.prototype