JavaScript中getDamaged()函数显示undefined的原因排查
为什么
getDamaged()会显示未定义? 让我帮你一步步排查这个问题,核心错误其实很直观:
首先看你出错的调用代码:
if (game.ship.livesPool.getPool[0].getDamaged())
1. 最关键的错误:没有正确调用getPool方法
根据你的描述,Pool类里的getPool是一个函数,用来返回内部的pool数组:
this.getPool = function(){ return pool; }
但你现在写的是getPool[0]——这相当于在尝试访问getPool这个函数对象的0属性,而不是调用它获取数组后再取第0个元素。函数对象本身没有getDamaged()方法,自然会报错“未定义”。
修复方法:给getPool加上括号,调用它来获取数组:
if (game.ship.livesPool.getPool()[0].getDamaged())
2. 检查Ship类的拼写笔误
你提供的Ship类代码里,draw方法有一行明显的拼写错误:
if (this.livesPoo
这里少了最后一个l,应该是livesPool。如果实际代码里存在这个笔误,会导致你根本无法正确访问到livesPool对象,进而引发后续的错误,记得修正这个问题。
3. 验证Pool的init方法是否正确生成了Lives实例
最后还要确认Pool类的init("lives")方法确实在内部的pool数组中创建了Lives实例。比如你的Pool类init方法应该类似这样:
this.init = function(type) { for (var i = 0; i < this.size; i++) { switch(type) { case "lives": pool.push(new Lives()); break; // 其他类型的初始化逻辑... } } };
如果init方法没有正确生成Lives实例,那么getPool()[0]会是undefined,同样会导致getDamaged()未定义的错误。
总结一下,最直接导致报错的原因是你没有调用getPool()方法,而是把它当成了数组直接访问,先修正这个问题,再检查其他可能的拼写或初始化逻辑问题。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

