我仍然对JS中的原型继承相当新,而且我遇到了一个我无法弄清楚的奇怪错误。我们正在使用canvas编写游戏,我们的代码看起来像这样:
function GameObject() {
// Generic object that everything inherits from
this.x = 0;
this.y = 0;
this.dx = -0.5;
this.dy = 0;
this.width = 0;
this.height = 0;
this.sprite = new Image();
this.sprite.src = "";
}
function Block(x,y) {
this.x = x;
this.y = y;
this.width = 2 * TILE_SIZE;
this.height = 2 * TILE_SIZE;
this.sprite.src = "images/block/block3.png";
blocks.push(this); // Manager array
}
Block.prototype = new GameObject();
Block.prototype.constructor = Block;
此代码工作正常。请注意,TILE_SIZE是在块脚本之后包含的单独文件中定义的 - 这似乎不是问题。但是当我们添加以下代码时(在Block函数之后):
function Block_Turret(x,y) {}
Block_Turret.prototype = new Block();
Block_Turret.prototype.constructor = Block_Turret;
我得到一个Uncaught ReferenceError,Tile_SIZE未在Block函数中定义!看起来孩子正在打破父母,我不知道为什么会这样 - 这似乎是一个相当简单的继承场景。提前谢谢!
答案 0 :(得分:1)
第一部分代码有效,因为你不是调用引用TILE_SIZE
的函数(即Block
)直到第二部分代码,其中引用了变量,并产生参考错误,因为正如您所解释的那样,尚未定义。与继承无关,只是简单的旧js。
详细说明,函数的内部在调用函数之前不会执行,因此只要语法合法,即使定义了函数也没有错误,即使你这样做,也可以使用它作为函数。参考。
应该改变结构。配置细节是独立的,自然应该包含在相关代码之前(想想旧的C标准)。
答案 1 :(得分:1)
TILE_SIZE必须在之前定义 new Block();