我对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;
我得到一个未捕获的引用错误,即块函数中未定义平铺大小!似乎孩子正在破坏父对象,我不知道为什么会这样-这似乎是一个相当简单的继承场景。提前谢谢!
最佳答案
第一部分代码工作是因为在引用变量的第二部分代码之前,您不会调用引用TILE_SIZE
(即Block
)的函数,并产生引用错误,因为正如您所解释的,它尚未定义。与继承无关,只是普通的老js。
要详细说明的是,在调用函数之前不会执行函数的内部内容,因此只要语法合法,就不会有错误,即使定义了函数,也像您一样,将其用作引用。
结构应该改变。独立的配置细节自然应该包含在依赖代码之前(想想旧的C标准)。
关于javascript - JavaScript-子继承中断父项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9659506/